diff --git a/.graphclient/index.ts b/.graphclient/index.ts index f7b50142..10685ed7 100644 --- a/.graphclient/index.ts +++ b/.graphclient/index.ts @@ -1,36 +1,54 @@ // @ts-nocheck -import { GraphQLResolveInfo, SelectionSetNode, FieldNode, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; -import type { GetMeshOptions } from '@graphql-mesh/runtime'; -import type { YamlConfig } from '@graphql-mesh/types'; -import { PubSub } from '@graphql-mesh/utils'; -import { DefaultLogger } from '@graphql-mesh/utils'; +import { + GraphQLResolveInfo, + SelectionSetNode, + FieldNode, + GraphQLScalarType, + GraphQLScalarTypeConfig, +} from "graphql"; +import type { GetMeshOptions } from "@graphql-mesh/runtime"; +import type { YamlConfig } from "@graphql-mesh/types"; +import { PubSub } from "@graphql-mesh/utils"; +import { DefaultLogger } from "@graphql-mesh/utils"; import MeshCache from "@graphql-mesh/cache-localforage"; -import { fetch as fetchFn } from '@whatwg-node/fetch'; +import { fetch as fetchFn } from "@whatwg-node/fetch"; -import { MeshResolvedSource } from '@graphql-mesh/runtime'; -import { MeshTransform, MeshPlugin } from '@graphql-mesh/types'; -import GraphqlHandler from "@graphql-mesh/graphql" +import { MeshResolvedSource } from "@graphql-mesh/runtime"; +import { MeshTransform, MeshPlugin } from "@graphql-mesh/types"; +import GraphqlHandler from "@graphql-mesh/graphql"; import PrefixTransform from "@graphql-mesh/transform-prefix"; import StitchingMerger from "@graphql-mesh/merger-stitching"; -import { createMeshHTTPHandler, MeshHTTPHandler } from '@graphql-mesh/http'; -import { getMesh, ExecuteMeshFn, SubscribeMeshFn, MeshContext as BaseMeshContext, MeshInstance } from '@graphql-mesh/runtime'; -import { MeshStore, FsStoreStorageAdapter } from '@graphql-mesh/store'; -import { path as pathModule } from '@graphql-mesh/cross-helpers'; -import { ImportFn } from '@graphql-mesh/types'; -import type { LineaTypes } from './sources/linea/types'; -import type { ArbitrumTypes } from './sources/arbitrum/types'; -import type { OkxX1TestnetTypes } from './sources/OKX_X1_Testnet/types'; +import { createMeshHTTPHandler, MeshHTTPHandler } from "@graphql-mesh/http"; +import { + getMesh, + ExecuteMeshFn, + SubscribeMeshFn, + MeshContext as BaseMeshContext, + MeshInstance, +} from "@graphql-mesh/runtime"; +import { MeshStore, FsStoreStorageAdapter } from "@graphql-mesh/store"; +import { path as pathModule } from "@graphql-mesh/cross-helpers"; +import { ImportFn } from "@graphql-mesh/types"; +import type { LineaTypes } from "./sources/linea/types"; +import type { ArbitrumTypes } from "./sources/arbitrum/types"; +import type { OkxX1TestnetTypes } from "./sources/OKX_X1_Testnet/types"; import * as importedModule$0 from "./sources/OKX_X1_Testnet/introspectionSchema"; import * as importedModule$1 from "./sources/linea/introspectionSchema"; import * as importedModule$2 from "./sources/arbitrum/introspectionSchema"; export type Maybe = T | null; export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -export type RequireFields = Omit & { [P in K]-?: NonNullable }; - - +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +export type RequireFields = Omit & { + [P in K]-?: NonNullable; +}; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { @@ -90,17 +108,15 @@ export type Query = { c42161__meta?: Maybe<_Meta_>; }; - export type Queryc195_ltokenArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -108,17 +124,15 @@ export type Queryc195_ltokensArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_tvlchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -126,17 +140,15 @@ export type Queryc195_tvlchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_aprchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -144,17 +156,15 @@ export type Queryc195_aprchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_activityArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -162,17 +172,15 @@ export type Queryc195_activitiesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_rewardsMintArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -180,17 +188,15 @@ export type Queryc195_rewardsMintsArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_preMiningLockArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -198,22 +204,19 @@ export type Queryc195_preMiningLocksArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc195__metaArgs = { block?: InputMaybe; }; - export type Queryc59144_ltokenArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -221,17 +224,15 @@ export type Queryc59144_ltokensArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_tvlchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -239,17 +240,15 @@ export type Queryc59144_tvlchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_aprchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -257,17 +256,15 @@ export type Queryc59144_aprchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_activityArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -275,17 +272,15 @@ export type Queryc59144_activitiesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_rewardsMintArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -293,17 +288,15 @@ export type Queryc59144_rewardsMintsArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_preMiningLockArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -311,22 +304,19 @@ export type Queryc59144_preMiningLocksArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc59144__metaArgs = { block?: InputMaybe; }; - export type Queryc42161_ltokenArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -334,17 +324,15 @@ export type Queryc42161_ltokensArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_tvlchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -352,17 +340,15 @@ export type Queryc42161_tvlchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_aprchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -370,17 +356,15 @@ export type Queryc42161_aprchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_activityArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -388,17 +372,15 @@ export type Queryc42161_activitiesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_rewardsMintArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -406,17 +388,15 @@ export type Queryc42161_rewardsMintsArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_preMiningLockArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -424,7 +404,6 @@ export type Queryc42161_preMiningLocksArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Queryc42161__metaArgs = { block?: InputMaybe; }; @@ -474,17 +453,15 @@ export type Subscription = { c42161__meta?: Maybe<_Meta_>; }; - export type Subscriptionc195_ltokenArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -492,17 +469,15 @@ export type Subscriptionc195_ltokensArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_tvlchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -510,17 +485,15 @@ export type Subscriptionc195_tvlchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_aprchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -528,17 +501,15 @@ export type Subscriptionc195_aprchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_activityArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -546,17 +517,15 @@ export type Subscriptionc195_activitiesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_rewardsMintArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -564,17 +533,15 @@ export type Subscriptionc195_rewardsMintsArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_preMiningLockArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -582,22 +549,19 @@ export type Subscriptionc195_preMiningLocksArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc195__metaArgs = { block?: InputMaybe; }; - export type Subscriptionc59144_ltokenArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -605,17 +569,15 @@ export type Subscriptionc59144_ltokensArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_tvlchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -623,17 +585,15 @@ export type Subscriptionc59144_tvlchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_aprchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -641,17 +601,15 @@ export type Subscriptionc59144_aprchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_activityArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -659,17 +617,15 @@ export type Subscriptionc59144_activitiesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_rewardsMintArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -677,17 +633,15 @@ export type Subscriptionc59144_rewardsMintsArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_preMiningLockArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -695,22 +649,19 @@ export type Subscriptionc59144_preMiningLocksArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc59144__metaArgs = { block?: InputMaybe; }; - export type Subscriptionc42161_ltokenArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -718,17 +669,15 @@ export type Subscriptionc42161_ltokensArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_tvlchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -736,17 +685,15 @@ export type Subscriptionc42161_tvlchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_aprchangeArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -754,17 +701,15 @@ export type Subscriptionc42161_aprchangesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_activityArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -772,17 +717,15 @@ export type Subscriptionc42161_activitiesArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_rewardsMintArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -790,17 +733,15 @@ export type Subscriptionc42161_rewardsMintsArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_preMiningLockArgs = { - id: Scalars['ID']; + id: Scalars["ID"]; block?: InputMaybe; subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; @@ -808,64 +749,63 @@ export type Subscriptionc42161_preMiningLocksArgs = { subgraphError?: _SubgraphErrorPolicy_; }; - export type Subscriptionc42161__metaArgs = { block?: InputMaybe; }; export type APRChange = { - id: Scalars['ID']; + id: Scalars["ID"]; ltoken: LToken; - timestamp: Scalars['BigInt']; - apr: Scalars['BigDecimal']; + timestamp: Scalars["BigInt"]; + apr: Scalars["BigDecimal"]; }; export type APRChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - apr?: InputMaybe; - apr_not?: InputMaybe; - apr_gt?: InputMaybe; - apr_lt?: InputMaybe; - apr_gte?: InputMaybe; - apr_lte?: InputMaybe; - apr_in?: InputMaybe>; - apr_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + apr?: InputMaybe; + apr_not?: InputMaybe; + apr_gt?: InputMaybe; + apr_lt?: InputMaybe; + apr_gte?: InputMaybe; + apr_lte?: InputMaybe; + apr_in?: InputMaybe>; + apr_not_in?: InputMaybe>; /** Filter for the block changed event. */ _change_block?: InputMaybe; and?: InputMaybe>>; @@ -873,240 +813,230 @@ export type APRChange_filter = { }; export type APRChange_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'apr' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards'; + | "id" + | "ltoken" + | "timestamp" + | "apr" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards"; export type Activity = { - id: Scalars['ID']; - requestId: Scalars['BigInt']; + id: Scalars["ID"]; + requestId: Scalars["BigInt"]; ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; action: ActivityAction; - amount: Scalars['BigDecimal']; - amountAfterFees: Scalars['BigDecimal']; + amount: Scalars["BigDecimal"]; + amountAfterFees: Scalars["BigDecimal"]; status: ActivityStatus; }; -export type ActivityAction = - | 'Deposit' - | 'Withdraw'; +export type ActivityAction = "Deposit" | "Withdraw"; -export type ActivityStatus = - | 'Queued' - | 'Cancelled' - | 'Success' - | 'Fulfilled'; +export type ActivityStatus = "Queued" | "Cancelled" | "Success" | "Fulfilled"; export type Activity_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - requestId?: InputMaybe; - requestId_not?: InputMaybe; - requestId_gt?: InputMaybe; - requestId_lt?: InputMaybe; - requestId_gte?: InputMaybe; - requestId_lte?: InputMaybe; - requestId_in?: InputMaybe>; - requestId_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + requestId?: InputMaybe; + requestId_not?: InputMaybe; + requestId_gt?: InputMaybe; + requestId_lt?: InputMaybe; + requestId_gte?: InputMaybe; + requestId_lte?: InputMaybe; + requestId_in?: InputMaybe>; + requestId_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; action?: InputMaybe; action_not?: InputMaybe; action_in?: InputMaybe>; action_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - amountAfterFees?: InputMaybe; - amountAfterFees_not?: InputMaybe; - amountAfterFees_gt?: InputMaybe; - amountAfterFees_lt?: InputMaybe; - amountAfterFees_gte?: InputMaybe; - amountAfterFees_lte?: InputMaybe; - amountAfterFees_in?: InputMaybe>; - amountAfterFees_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + amountAfterFees?: InputMaybe; + amountAfterFees_not?: InputMaybe; + amountAfterFees_gt?: InputMaybe; + amountAfterFees_lt?: InputMaybe; + amountAfterFees_gte?: InputMaybe; + amountAfterFees_lte?: InputMaybe; + amountAfterFees_in?: InputMaybe>; + amountAfterFees_not_in?: InputMaybe>; status?: InputMaybe; status_not?: InputMaybe; status_in?: InputMaybe>; status_not_in?: InputMaybe>; /** Filter for the block changed event. */ _change_block?: InputMaybe; - account_gt?: InputMaybe; - account_lt?: InputMaybe; - account_gte?: InputMaybe; - account_lte?: InputMaybe; + account_gt?: InputMaybe; + account_lt?: InputMaybe; + account_gte?: InputMaybe; + account_lte?: InputMaybe; and?: InputMaybe>>; or?: InputMaybe>>; }; export type Activity_orderBy = - | 'id' - | 'requestId' - | 'ltoken' - | 'timestamp' - | 'account' - | 'action' - | 'amount' - | 'amountAfterFees' - | 'status' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards'; + | "id" + | "requestId" + | "ltoken" + | "timestamp" + | "account" + | "action" + | "amount" + | "amountAfterFees" + | "status" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards"; export type BlockChangedFilter = { - number_gte: Scalars['Int']; + number_gte: Scalars["Int"]; }; export type Block_height = { - hash?: InputMaybe; - number?: InputMaybe; - number_gte?: InputMaybe; + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; }; export type LToken = { - id: Scalars['ID']; - symbol: Scalars['String']; - decimals: Scalars['Int']; - totalMintedRewards: Scalars['BigDecimal']; + id: Scalars["ID"]; + symbol: Scalars["String"]; + decimals: Scalars["Int"]; + totalMintedRewards: Scalars["BigDecimal"]; tvlUpdates?: Maybe>; aprUpdates?: Maybe>; activities?: Maybe>; rewardsMints?: Maybe>; }; - export type LTokentvlUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; }; - export type LTokenaprUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; }; - export type LTokenactivitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; }; - export type LTokenrewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; + skip?: InputMaybe; + first?: InputMaybe; orderBy?: InputMaybe; orderDirection?: InputMaybe; where?: InputMaybe; }; export type LToken_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - symbol?: InputMaybe; - symbol_not?: InputMaybe; - symbol_gt?: InputMaybe; - symbol_lt?: InputMaybe; - symbol_gte?: InputMaybe; - symbol_lte?: InputMaybe; - symbol_in?: InputMaybe>; - symbol_not_in?: InputMaybe>; - symbol_contains?: InputMaybe; - symbol_contains_nocase?: InputMaybe; - symbol_not_contains?: InputMaybe; - symbol_not_contains_nocase?: InputMaybe; - symbol_starts_with?: InputMaybe; - symbol_starts_with_nocase?: InputMaybe; - symbol_not_starts_with?: InputMaybe; - symbol_not_starts_with_nocase?: InputMaybe; - symbol_ends_with?: InputMaybe; - symbol_ends_with_nocase?: InputMaybe; - symbol_not_ends_with?: InputMaybe; - symbol_not_ends_with_nocase?: InputMaybe; - decimals?: InputMaybe; - decimals_not?: InputMaybe; - decimals_gt?: InputMaybe; - decimals_lt?: InputMaybe; - decimals_gte?: InputMaybe; - decimals_lte?: InputMaybe; - decimals_in?: InputMaybe>; - decimals_not_in?: InputMaybe>; - totalMintedRewards?: InputMaybe; - totalMintedRewards_not?: InputMaybe; - totalMintedRewards_gt?: InputMaybe; - totalMintedRewards_lt?: InputMaybe; - totalMintedRewards_gte?: InputMaybe; - totalMintedRewards_lte?: InputMaybe; - totalMintedRewards_in?: InputMaybe>; - totalMintedRewards_not_in?: InputMaybe>; + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + symbol?: InputMaybe; + symbol_not?: InputMaybe; + symbol_gt?: InputMaybe; + symbol_lt?: InputMaybe; + symbol_gte?: InputMaybe; + symbol_lte?: InputMaybe; + symbol_in?: InputMaybe>; + symbol_not_in?: InputMaybe>; + symbol_contains?: InputMaybe; + symbol_contains_nocase?: InputMaybe; + symbol_not_contains?: InputMaybe; + symbol_not_contains_nocase?: InputMaybe; + symbol_starts_with?: InputMaybe; + symbol_starts_with_nocase?: InputMaybe; + symbol_not_starts_with?: InputMaybe; + symbol_not_starts_with_nocase?: InputMaybe; + symbol_ends_with?: InputMaybe; + symbol_ends_with_nocase?: InputMaybe; + symbol_not_ends_with?: InputMaybe; + symbol_not_ends_with_nocase?: InputMaybe; + decimals?: InputMaybe; + decimals_not?: InputMaybe; + decimals_gt?: InputMaybe; + decimals_lt?: InputMaybe; + decimals_gte?: InputMaybe; + decimals_lte?: InputMaybe; + decimals_in?: InputMaybe>; + decimals_not_in?: InputMaybe>; + totalMintedRewards?: InputMaybe; + totalMintedRewards_not?: InputMaybe; + totalMintedRewards_gt?: InputMaybe; + totalMintedRewards_lt?: InputMaybe; + totalMintedRewards_gte?: InputMaybe; + totalMintedRewards_lte?: InputMaybe; + totalMintedRewards_in?: InputMaybe>; + totalMintedRewards_not_in?: InputMaybe>; tvlUpdates_?: InputMaybe; aprUpdates_?: InputMaybe; activities_?: InputMaybe; @@ -1118,216 +1048,211 @@ export type LToken_filter = { }; export type LToken_orderBy = - | 'id' - | 'symbol' - | 'decimals' - | 'totalMintedRewards' - | 'tvlUpdates' - | 'aprUpdates' - | 'activities' - | 'rewardsMints'; + | "id" + | "symbol" + | "decimals" + | "totalMintedRewards" + | "tvlUpdates" + | "aprUpdates" + | "activities" + | "rewardsMints"; /** Defines the order direction, either ascending or descending */ -export type OrderDirection = - | 'asc' - | 'desc'; +export type OrderDirection = "asc" | "desc"; export type PreMiningLock = { - id: Scalars['ID']; - amount: Scalars['BigDecimal']; - duration: Scalars['Int']; + id: Scalars["ID"]; + amount: Scalars["BigDecimal"]; + duration: Scalars["Int"]; }; export type PreMiningLock_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - duration?: InputMaybe; - duration_not?: InputMaybe; - duration_gt?: InputMaybe; - duration_lt?: InputMaybe; - duration_gte?: InputMaybe; - duration_lte?: InputMaybe; - duration_in?: InputMaybe>; - duration_not_in?: InputMaybe>; + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + duration?: InputMaybe; + duration_not?: InputMaybe; + duration_gt?: InputMaybe; + duration_lt?: InputMaybe; + duration_gte?: InputMaybe; + duration_lte?: InputMaybe; + duration_in?: InputMaybe>; + duration_not_in?: InputMaybe>; /** Filter for the block changed event. */ _change_block?: InputMaybe; and?: InputMaybe>>; or?: InputMaybe>>; }; -export type PreMiningLock_orderBy = - | 'id' - | 'amount' - | 'duration'; +export type PreMiningLock_orderBy = "id" | "amount" | "duration"; export type RewardsMint = { - id: Scalars['ID']; + id: Scalars["ID"]; ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - balanceBefore: Scalars['BigDecimal']; - revenue: Scalars['BigDecimal']; - growth: Scalars['BigDecimal']; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + balanceBefore: Scalars["BigDecimal"]; + revenue: Scalars["BigDecimal"]; + growth: Scalars["BigDecimal"]; }; export type RewardsMint_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - balanceBefore?: InputMaybe; - balanceBefore_not?: InputMaybe; - balanceBefore_gt?: InputMaybe; - balanceBefore_lt?: InputMaybe; - balanceBefore_gte?: InputMaybe; - balanceBefore_lte?: InputMaybe; - balanceBefore_in?: InputMaybe>; - balanceBefore_not_in?: InputMaybe>; - revenue?: InputMaybe; - revenue_not?: InputMaybe; - revenue_gt?: InputMaybe; - revenue_lt?: InputMaybe; - revenue_gte?: InputMaybe; - revenue_lte?: InputMaybe; - revenue_in?: InputMaybe>; - revenue_not_in?: InputMaybe>; - growth?: InputMaybe; - growth_not?: InputMaybe; - growth_gt?: InputMaybe; - growth_lt?: InputMaybe; - growth_gte?: InputMaybe; - growth_lte?: InputMaybe; - growth_in?: InputMaybe>; - growth_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + balanceBefore?: InputMaybe; + balanceBefore_not?: InputMaybe; + balanceBefore_gt?: InputMaybe; + balanceBefore_lt?: InputMaybe; + balanceBefore_gte?: InputMaybe; + balanceBefore_lte?: InputMaybe; + balanceBefore_in?: InputMaybe>; + balanceBefore_not_in?: InputMaybe>; + revenue?: InputMaybe; + revenue_not?: InputMaybe; + revenue_gt?: InputMaybe; + revenue_lt?: InputMaybe; + revenue_gte?: InputMaybe; + revenue_lte?: InputMaybe; + revenue_in?: InputMaybe>; + revenue_not_in?: InputMaybe>; + growth?: InputMaybe; + growth_not?: InputMaybe; + growth_gt?: InputMaybe; + growth_lt?: InputMaybe; + growth_gte?: InputMaybe; + growth_lte?: InputMaybe; + growth_in?: InputMaybe>; + growth_not_in?: InputMaybe>; /** Filter for the block changed event. */ _change_block?: InputMaybe; - account_gt?: InputMaybe; - account_lt?: InputMaybe; - account_gte?: InputMaybe; - account_lte?: InputMaybe; + account_gt?: InputMaybe; + account_lt?: InputMaybe; + account_gte?: InputMaybe; + account_lte?: InputMaybe; and?: InputMaybe>>; or?: InputMaybe>>; }; export type RewardsMint_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'account' - | 'balanceBefore' - | 'revenue' - | 'growth' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards'; + | "id" + | "ltoken" + | "timestamp" + | "account" + | "balanceBefore" + | "revenue" + | "growth" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards"; export type TVLChange = { - id: Scalars['ID']; + id: Scalars["ID"]; ltoken: LToken; - timestamp: Scalars['BigInt']; - amount: Scalars['BigDecimal']; + timestamp: Scalars["BigInt"]; + amount: Scalars["BigDecimal"]; }; export type TVLChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; /** Filter for the block changed event. */ _change_block?: InputMaybe; and?: InputMaybe>>; @@ -1335,22 +1260,22 @@ export type TVLChange_filter = { }; export type TVLChange_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'amount' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards'; + | "id" + | "ltoken" + | "timestamp" + | "amount" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards"; export type _Block_ = { /** The hash of the block */ - hash?: Maybe; + hash?: Maybe; /** The block number */ - number: Scalars['Int']; + number: Scalars["Int"]; /** Integer representation of the timestamp stored in blocks for the chain */ - timestamp?: Maybe; + timestamp?: Maybe; }; /** The type for the top-level _meta field */ @@ -1364,23 +1289,22 @@ export type _Meta_ = { */ block: _Block_; /** The deployment ID */ - deployment: Scalars['String']; + deployment: Scalars["String"]; /** If `true`, the subgraph encountered indexing errors at some past block */ - hasIndexingErrors: Scalars['Boolean']; + hasIndexingErrors: Scalars["Boolean"]; }; export type _SubgraphErrorPolicy_ = /** Data will be returned even if the subgraph has indexing errors */ - | 'allow' + | "allow" /** If the subgraph has indexing errors, data will be omitted. The default. */ - | 'deny'; + | "deny"; export type WithIndex = TObject & Record; export type ResolversObject = WithIndex; export type ResolverTypeWrapper = Promise | T; - export type ResolverWithResolve = { resolve: ResolverFn; }; @@ -1394,7 +1318,9 @@ export type NewStitchingResolver = { selectionSet: string | ((fieldNode: FieldNode) => SelectionSetNode); resolve: ResolverFn; }; -export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; +export type StitchingResolver = + | LegacyStitchingResolver + | NewStitchingResolver; export type Resolver = | ResolverFn | ResolverWithResolve @@ -1404,26 +1330,42 @@ export type ResolverFn = ( parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => Promise | TResult; export type SubscriptionSubscribeFn = ( parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => AsyncIterable | Promise>; export type SubscriptionResolveFn = ( parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => TResult | Promise; -export interface SubscriptionSubscriberObject { - subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>; - resolve?: SubscriptionResolveFn; +export interface SubscriptionSubscriberObject< + TResult, + TKey extends string, + TParent, + TContext, + TArgs, +> { + subscribe: SubscriptionSubscribeFn< + { [key in TKey]: TResult }, + TParent, + TContext, + TArgs + >; + resolve?: SubscriptionResolveFn< + TResult, + { [key in TKey]: TResult }, + TContext, + TArgs + >; } export interface SubscriptionResolverObject { @@ -1431,34 +1373,55 @@ export interface SubscriptionResolverObject { resolve: SubscriptionResolveFn; } -export type SubscriptionObject = +export type SubscriptionObject< + TResult, + TKey extends string, + TParent, + TContext, + TArgs, +> = | SubscriptionSubscriberObject | SubscriptionResolverObject; -export type SubscriptionResolver = - | ((...args: any[]) => SubscriptionObject) +export type SubscriptionResolver< + TResult, + TKey extends string, + TParent = {}, + TContext = {}, + TArgs = {}, +> = + | (( + ...args: any[] + ) => SubscriptionObject) | SubscriptionObject; export type TypeResolveFn = ( parent: TParent, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => Maybe | Promise>; -export type IsTypeOfResolverFn = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise; +export type IsTypeOfResolverFn = ( + obj: T, + context: TContext, + info: GraphQLResolveInfo, +) => boolean | Promise; export type NextResolverFn = () => Promise; -export type DirectiveResolverFn = ( +export type DirectiveResolverFn< + TResult = {}, + TParent = {}, + TContext = {}, + TArgs = {}, +> = ( next: NextResolverFn, parent: TParent, args: TArgs, context: TContext, - info: GraphQLResolveInfo + info: GraphQLResolveInfo, ) => TResult | Promise; - - /** Mapping between all available schema types and the resolvers types */ export type ResolversTypes = ResolversObject<{ Query: ResolverTypeWrapper<{}>; @@ -1471,15 +1434,15 @@ export type ResolversTypes = ResolversObject<{ ActivityStatus: ActivityStatus; Activity_filter: Activity_filter; Activity_orderBy: Activity_orderBy; - BigDecimal: ResolverTypeWrapper; - BigInt: ResolverTypeWrapper; + BigDecimal: ResolverTypeWrapper; + BigInt: ResolverTypeWrapper; BlockChangedFilter: BlockChangedFilter; Block_height: Block_height; - Boolean: ResolverTypeWrapper; - Bytes: ResolverTypeWrapper; - Float: ResolverTypeWrapper; - ID: ResolverTypeWrapper; - Int: ResolverTypeWrapper; + Boolean: ResolverTypeWrapper; + Bytes: ResolverTypeWrapper; + Float: ResolverTypeWrapper; + ID: ResolverTypeWrapper; + Int: ResolverTypeWrapper; LToken: ResolverTypeWrapper; LToken_filter: LToken_filter; LToken_orderBy: LToken_orderBy; @@ -1490,14 +1453,14 @@ export type ResolversTypes = ResolversObject<{ RewardsMint: ResolverTypeWrapper; RewardsMint_filter: RewardsMint_filter; RewardsMint_orderBy: RewardsMint_orderBy; - String: ResolverTypeWrapper; + String: ResolverTypeWrapper; TVLChange: ResolverTypeWrapper; TVLChange_filter: TVLChange_filter; TVLChange_orderBy: TVLChange_orderBy; _Block_: ResolverTypeWrapper<_Block_>; _Meta_: ResolverTypeWrapper<_Meta_>; _SubgraphErrorPolicy_: _SubgraphErrorPolicy_; - Int8: ResolverTypeWrapper; + Int8: ResolverTypeWrapper; }>; /** Mapping between all available schema types and the resolvers parents */ @@ -1508,216 +1471,830 @@ export type ResolversParentTypes = ResolversObject<{ APRChange_filter: APRChange_filter; Activity: Activity; Activity_filter: Activity_filter; - BigDecimal: Scalars['BigDecimal']; - BigInt: Scalars['BigInt']; + BigDecimal: Scalars["BigDecimal"]; + BigInt: Scalars["BigInt"]; BlockChangedFilter: BlockChangedFilter; Block_height: Block_height; - Boolean: Scalars['Boolean']; - Bytes: Scalars['Bytes']; - Float: Scalars['Float']; - ID: Scalars['ID']; - Int: Scalars['Int']; + Boolean: Scalars["Boolean"]; + Bytes: Scalars["Bytes"]; + Float: Scalars["Float"]; + ID: Scalars["ID"]; + Int: Scalars["Int"]; LToken: LToken; LToken_filter: LToken_filter; PreMiningLock: PreMiningLock; PreMiningLock_filter: PreMiningLock_filter; RewardsMint: RewardsMint; RewardsMint_filter: RewardsMint_filter; - String: Scalars['String']; + String: Scalars["String"]; TVLChange: TVLChange; TVLChange_filter: TVLChange_filter; _Block_: _Block_; _Meta_: _Meta_; - Int8: Scalars['Int8']; + Int8: Scalars["Int8"]; }>; -export type entityDirectiveArgs = { }; +export type entityDirectiveArgs = {}; -export type entityDirectiveResolver = DirectiveResolverFn; +export type entityDirectiveResolver< + Result, + Parent, + ContextType = MeshContext, + Args = entityDirectiveArgs, +> = DirectiveResolverFn; export type subgraphIdDirectiveArgs = { - id: Scalars['String']; + id: Scalars["String"]; }; -export type subgraphIdDirectiveResolver = DirectiveResolverFn; +export type subgraphIdDirectiveResolver< + Result, + Parent, + ContextType = MeshContext, + Args = subgraphIdDirectiveArgs, +> = DirectiveResolverFn; export type derivedFromDirectiveArgs = { - field: Scalars['String']; -}; - -export type derivedFromDirectiveResolver = DirectiveResolverFn; - -export type QueryResolvers = ResolversObject<{ - c195_ltoken?: Resolver, ParentType, ContextType, RequireFields>; - c195_ltokens?: Resolver, ParentType, ContextType, RequireFields>; - c195_tvlchange?: Resolver, ParentType, ContextType, RequireFields>; - c195_tvlchanges?: Resolver, ParentType, ContextType, RequireFields>; - c195_aprchange?: Resolver, ParentType, ContextType, RequireFields>; - c195_aprchanges?: Resolver, ParentType, ContextType, RequireFields>; - c195_activity?: Resolver, ParentType, ContextType, RequireFields>; - c195_activities?: Resolver, ParentType, ContextType, RequireFields>; - c195_rewardsMint?: Resolver, ParentType, ContextType, RequireFields>; - c195_rewardsMints?: Resolver, ParentType, ContextType, RequireFields>; - c195_preMiningLock?: Resolver, ParentType, ContextType, RequireFields>; - c195_preMiningLocks?: Resolver, ParentType, ContextType, RequireFields>; - c195__meta?: Resolver, ParentType, ContextType, Partial>; - c59144_ltoken?: Resolver, ParentType, ContextType, RequireFields>; - c59144_ltokens?: Resolver, ParentType, ContextType, RequireFields>; - c59144_tvlchange?: Resolver, ParentType, ContextType, RequireFields>; - c59144_tvlchanges?: Resolver, ParentType, ContextType, RequireFields>; - c59144_aprchange?: Resolver, ParentType, ContextType, RequireFields>; - c59144_aprchanges?: Resolver, ParentType, ContextType, RequireFields>; - c59144_activity?: Resolver, ParentType, ContextType, RequireFields>; - c59144_activities?: Resolver, ParentType, ContextType, RequireFields>; - c59144_rewardsMint?: Resolver, ParentType, ContextType, RequireFields>; - c59144_rewardsMints?: Resolver, ParentType, ContextType, RequireFields>; - c59144_preMiningLock?: Resolver, ParentType, ContextType, RequireFields>; - c59144_preMiningLocks?: Resolver, ParentType, ContextType, RequireFields>; - c59144__meta?: Resolver, ParentType, ContextType, Partial>; - c42161_ltoken?: Resolver, ParentType, ContextType, RequireFields>; - c42161_ltokens?: Resolver, ParentType, ContextType, RequireFields>; - c42161_tvlchange?: Resolver, ParentType, ContextType, RequireFields>; - c42161_tvlchanges?: Resolver, ParentType, ContextType, RequireFields>; - c42161_aprchange?: Resolver, ParentType, ContextType, RequireFields>; - c42161_aprchanges?: Resolver, ParentType, ContextType, RequireFields>; - c42161_activity?: Resolver, ParentType, ContextType, RequireFields>; - c42161_activities?: Resolver, ParentType, ContextType, RequireFields>; - c42161_rewardsMint?: Resolver, ParentType, ContextType, RequireFields>; - c42161_rewardsMints?: Resolver, ParentType, ContextType, RequireFields>; - c42161_preMiningLock?: Resolver, ParentType, ContextType, RequireFields>; - c42161_preMiningLocks?: Resolver, ParentType, ContextType, RequireFields>; - c42161__meta?: Resolver, ParentType, ContextType, Partial>; + field: Scalars["String"]; +}; + +export type derivedFromDirectiveResolver< + Result, + Parent, + ContextType = MeshContext, + Args = derivedFromDirectiveArgs, +> = DirectiveResolverFn; + +export type QueryResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["Query"] = ResolversParentTypes["Query"], +> = ResolversObject<{ + c195_ltoken?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c195_ltokens?: Resolver< + Array, + ParentType, + ContextType, + RequireFields + >; + c195_tvlchange?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c195_tvlchanges?: Resolver< + Array, + ParentType, + ContextType, + RequireFields + >; + c195_aprchange?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c195_aprchanges?: Resolver< + Array, + ParentType, + ContextType, + RequireFields + >; + c195_activity?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c195_activities?: Resolver< + Array, + ParentType, + ContextType, + RequireFields + >; + c195_rewardsMint?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c195_rewardsMints?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc195_rewardsMintsArgs, + "skip" | "first" | "subgraphError" + > + >; + c195_preMiningLock?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c195_preMiningLocks?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc195_preMiningLocksArgs, + "skip" | "first" | "subgraphError" + > + >; + c195__meta?: Resolver< + Maybe, + ParentType, + ContextType, + Partial + >; + c59144_ltoken?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c59144_ltokens?: Resolver< + Array, + ParentType, + ContextType, + RequireFields + >; + c59144_tvlchange?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c59144_tvlchanges?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc59144_tvlchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_aprchange?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c59144_aprchanges?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc59144_aprchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_activity?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c59144_activities?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc59144_activitiesArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_rewardsMint?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c59144_rewardsMints?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc59144_rewardsMintsArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_preMiningLock?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c59144_preMiningLocks?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc59144_preMiningLocksArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144__meta?: Resolver< + Maybe, + ParentType, + ContextType, + Partial + >; + c42161_ltoken?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c42161_ltokens?: Resolver< + Array, + ParentType, + ContextType, + RequireFields + >; + c42161_tvlchange?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c42161_tvlchanges?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc42161_tvlchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_aprchange?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c42161_aprchanges?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc42161_aprchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_activity?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c42161_activities?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc42161_activitiesArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_rewardsMint?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c42161_rewardsMints?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc42161_rewardsMintsArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_preMiningLock?: Resolver< + Maybe, + ParentType, + ContextType, + RequireFields + >; + c42161_preMiningLocks?: Resolver< + Array, + ParentType, + ContextType, + RequireFields< + Queryc42161_preMiningLocksArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161__meta?: Resolver< + Maybe, + ParentType, + ContextType, + Partial + >; }>; -export type SubscriptionResolvers = ResolversObject<{ - c195_ltoken?: SubscriptionResolver, "c195_ltoken", ParentType, ContextType, RequireFields>; - c195_ltokens?: SubscriptionResolver, "c195_ltokens", ParentType, ContextType, RequireFields>; - c195_tvlchange?: SubscriptionResolver, "c195_tvlchange", ParentType, ContextType, RequireFields>; - c195_tvlchanges?: SubscriptionResolver, "c195_tvlchanges", ParentType, ContextType, RequireFields>; - c195_aprchange?: SubscriptionResolver, "c195_aprchange", ParentType, ContextType, RequireFields>; - c195_aprchanges?: SubscriptionResolver, "c195_aprchanges", ParentType, ContextType, RequireFields>; - c195_activity?: SubscriptionResolver, "c195_activity", ParentType, ContextType, RequireFields>; - c195_activities?: SubscriptionResolver, "c195_activities", ParentType, ContextType, RequireFields>; - c195_rewardsMint?: SubscriptionResolver, "c195_rewardsMint", ParentType, ContextType, RequireFields>; - c195_rewardsMints?: SubscriptionResolver, "c195_rewardsMints", ParentType, ContextType, RequireFields>; - c195_preMiningLock?: SubscriptionResolver, "c195_preMiningLock", ParentType, ContextType, RequireFields>; - c195_preMiningLocks?: SubscriptionResolver, "c195_preMiningLocks", ParentType, ContextType, RequireFields>; - c195__meta?: SubscriptionResolver, "c195__meta", ParentType, ContextType, Partial>; - c59144_ltoken?: SubscriptionResolver, "c59144_ltoken", ParentType, ContextType, RequireFields>; - c59144_ltokens?: SubscriptionResolver, "c59144_ltokens", ParentType, ContextType, RequireFields>; - c59144_tvlchange?: SubscriptionResolver, "c59144_tvlchange", ParentType, ContextType, RequireFields>; - c59144_tvlchanges?: SubscriptionResolver, "c59144_tvlchanges", ParentType, ContextType, RequireFields>; - c59144_aprchange?: SubscriptionResolver, "c59144_aprchange", ParentType, ContextType, RequireFields>; - c59144_aprchanges?: SubscriptionResolver, "c59144_aprchanges", ParentType, ContextType, RequireFields>; - c59144_activity?: SubscriptionResolver, "c59144_activity", ParentType, ContextType, RequireFields>; - c59144_activities?: SubscriptionResolver, "c59144_activities", ParentType, ContextType, RequireFields>; - c59144_rewardsMint?: SubscriptionResolver, "c59144_rewardsMint", ParentType, ContextType, RequireFields>; - c59144_rewardsMints?: SubscriptionResolver, "c59144_rewardsMints", ParentType, ContextType, RequireFields>; - c59144_preMiningLock?: SubscriptionResolver, "c59144_preMiningLock", ParentType, ContextType, RequireFields>; - c59144_preMiningLocks?: SubscriptionResolver, "c59144_preMiningLocks", ParentType, ContextType, RequireFields>; - c59144__meta?: SubscriptionResolver, "c59144__meta", ParentType, ContextType, Partial>; - c42161_ltoken?: SubscriptionResolver, "c42161_ltoken", ParentType, ContextType, RequireFields>; - c42161_ltokens?: SubscriptionResolver, "c42161_ltokens", ParentType, ContextType, RequireFields>; - c42161_tvlchange?: SubscriptionResolver, "c42161_tvlchange", ParentType, ContextType, RequireFields>; - c42161_tvlchanges?: SubscriptionResolver, "c42161_tvlchanges", ParentType, ContextType, RequireFields>; - c42161_aprchange?: SubscriptionResolver, "c42161_aprchange", ParentType, ContextType, RequireFields>; - c42161_aprchanges?: SubscriptionResolver, "c42161_aprchanges", ParentType, ContextType, RequireFields>; - c42161_activity?: SubscriptionResolver, "c42161_activity", ParentType, ContextType, RequireFields>; - c42161_activities?: SubscriptionResolver, "c42161_activities", ParentType, ContextType, RequireFields>; - c42161_rewardsMint?: SubscriptionResolver, "c42161_rewardsMint", ParentType, ContextType, RequireFields>; - c42161_rewardsMints?: SubscriptionResolver, "c42161_rewardsMints", ParentType, ContextType, RequireFields>; - c42161_preMiningLock?: SubscriptionResolver, "c42161_preMiningLock", ParentType, ContextType, RequireFields>; - c42161_preMiningLocks?: SubscriptionResolver, "c42161_preMiningLocks", ParentType, ContextType, RequireFields>; - c42161__meta?: SubscriptionResolver, "c42161__meta", ParentType, ContextType, Partial>; +export type SubscriptionResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["Subscription"] = ResolversParentTypes["Subscription"], +> = ResolversObject<{ + c195_ltoken?: SubscriptionResolver< + Maybe, + "c195_ltoken", + ParentType, + ContextType, + RequireFields + >; + c195_ltokens?: SubscriptionResolver< + Array, + "c195_ltokens", + ParentType, + ContextType, + RequireFields< + Subscriptionc195_ltokensArgs, + "skip" | "first" | "subgraphError" + > + >; + c195_tvlchange?: SubscriptionResolver< + Maybe, + "c195_tvlchange", + ParentType, + ContextType, + RequireFields + >; + c195_tvlchanges?: SubscriptionResolver< + Array, + "c195_tvlchanges", + ParentType, + ContextType, + RequireFields< + Subscriptionc195_tvlchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c195_aprchange?: SubscriptionResolver< + Maybe, + "c195_aprchange", + ParentType, + ContextType, + RequireFields + >; + c195_aprchanges?: SubscriptionResolver< + Array, + "c195_aprchanges", + ParentType, + ContextType, + RequireFields< + Subscriptionc195_aprchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c195_activity?: SubscriptionResolver< + Maybe, + "c195_activity", + ParentType, + ContextType, + RequireFields + >; + c195_activities?: SubscriptionResolver< + Array, + "c195_activities", + ParentType, + ContextType, + RequireFields< + Subscriptionc195_activitiesArgs, + "skip" | "first" | "subgraphError" + > + >; + c195_rewardsMint?: SubscriptionResolver< + Maybe, + "c195_rewardsMint", + ParentType, + ContextType, + RequireFields + >; + c195_rewardsMints?: SubscriptionResolver< + Array, + "c195_rewardsMints", + ParentType, + ContextType, + RequireFields< + Subscriptionc195_rewardsMintsArgs, + "skip" | "first" | "subgraphError" + > + >; + c195_preMiningLock?: SubscriptionResolver< + Maybe, + "c195_preMiningLock", + ParentType, + ContextType, + RequireFields + >; + c195_preMiningLocks?: SubscriptionResolver< + Array, + "c195_preMiningLocks", + ParentType, + ContextType, + RequireFields< + Subscriptionc195_preMiningLocksArgs, + "skip" | "first" | "subgraphError" + > + >; + c195__meta?: SubscriptionResolver< + Maybe, + "c195__meta", + ParentType, + ContextType, + Partial + >; + c59144_ltoken?: SubscriptionResolver< + Maybe, + "c59144_ltoken", + ParentType, + ContextType, + RequireFields + >; + c59144_ltokens?: SubscriptionResolver< + Array, + "c59144_ltokens", + ParentType, + ContextType, + RequireFields< + Subscriptionc59144_ltokensArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_tvlchange?: SubscriptionResolver< + Maybe, + "c59144_tvlchange", + ParentType, + ContextType, + RequireFields + >; + c59144_tvlchanges?: SubscriptionResolver< + Array, + "c59144_tvlchanges", + ParentType, + ContextType, + RequireFields< + Subscriptionc59144_tvlchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_aprchange?: SubscriptionResolver< + Maybe, + "c59144_aprchange", + ParentType, + ContextType, + RequireFields + >; + c59144_aprchanges?: SubscriptionResolver< + Array, + "c59144_aprchanges", + ParentType, + ContextType, + RequireFields< + Subscriptionc59144_aprchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_activity?: SubscriptionResolver< + Maybe, + "c59144_activity", + ParentType, + ContextType, + RequireFields + >; + c59144_activities?: SubscriptionResolver< + Array, + "c59144_activities", + ParentType, + ContextType, + RequireFields< + Subscriptionc59144_activitiesArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_rewardsMint?: SubscriptionResolver< + Maybe, + "c59144_rewardsMint", + ParentType, + ContextType, + RequireFields + >; + c59144_rewardsMints?: SubscriptionResolver< + Array, + "c59144_rewardsMints", + ParentType, + ContextType, + RequireFields< + Subscriptionc59144_rewardsMintsArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144_preMiningLock?: SubscriptionResolver< + Maybe, + "c59144_preMiningLock", + ParentType, + ContextType, + RequireFields + >; + c59144_preMiningLocks?: SubscriptionResolver< + Array, + "c59144_preMiningLocks", + ParentType, + ContextType, + RequireFields< + Subscriptionc59144_preMiningLocksArgs, + "skip" | "first" | "subgraphError" + > + >; + c59144__meta?: SubscriptionResolver< + Maybe, + "c59144__meta", + ParentType, + ContextType, + Partial + >; + c42161_ltoken?: SubscriptionResolver< + Maybe, + "c42161_ltoken", + ParentType, + ContextType, + RequireFields + >; + c42161_ltokens?: SubscriptionResolver< + Array, + "c42161_ltokens", + ParentType, + ContextType, + RequireFields< + Subscriptionc42161_ltokensArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_tvlchange?: SubscriptionResolver< + Maybe, + "c42161_tvlchange", + ParentType, + ContextType, + RequireFields + >; + c42161_tvlchanges?: SubscriptionResolver< + Array, + "c42161_tvlchanges", + ParentType, + ContextType, + RequireFields< + Subscriptionc42161_tvlchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_aprchange?: SubscriptionResolver< + Maybe, + "c42161_aprchange", + ParentType, + ContextType, + RequireFields + >; + c42161_aprchanges?: SubscriptionResolver< + Array, + "c42161_aprchanges", + ParentType, + ContextType, + RequireFields< + Subscriptionc42161_aprchangesArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_activity?: SubscriptionResolver< + Maybe, + "c42161_activity", + ParentType, + ContextType, + RequireFields + >; + c42161_activities?: SubscriptionResolver< + Array, + "c42161_activities", + ParentType, + ContextType, + RequireFields< + Subscriptionc42161_activitiesArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_rewardsMint?: SubscriptionResolver< + Maybe, + "c42161_rewardsMint", + ParentType, + ContextType, + RequireFields + >; + c42161_rewardsMints?: SubscriptionResolver< + Array, + "c42161_rewardsMints", + ParentType, + ContextType, + RequireFields< + Subscriptionc42161_rewardsMintsArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161_preMiningLock?: SubscriptionResolver< + Maybe, + "c42161_preMiningLock", + ParentType, + ContextType, + RequireFields + >; + c42161_preMiningLocks?: SubscriptionResolver< + Array, + "c42161_preMiningLocks", + ParentType, + ContextType, + RequireFields< + Subscriptionc42161_preMiningLocksArgs, + "skip" | "first" | "subgraphError" + > + >; + c42161__meta?: SubscriptionResolver< + Maybe, + "c42161__meta", + ParentType, + ContextType, + Partial + >; }>; -export type APRChangeResolvers = ResolversObject<{ - id?: Resolver; - ltoken?: Resolver; - timestamp?: Resolver; - apr?: Resolver; +export type APRChangeResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["APRChange"] = ResolversParentTypes["APRChange"], +> = ResolversObject<{ + id?: Resolver; + ltoken?: Resolver; + timestamp?: Resolver; + apr?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export type ActivityResolvers = ResolversObject<{ - id?: Resolver; - requestId?: Resolver; - ltoken?: Resolver; - timestamp?: Resolver; - account?: Resolver; - action?: Resolver; - amount?: Resolver; - amountAfterFees?: Resolver; - status?: Resolver; +export type ActivityResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["Activity"] = ResolversParentTypes["Activity"], +> = ResolversObject<{ + id?: Resolver; + requestId?: Resolver; + ltoken?: Resolver; + timestamp?: Resolver; + account?: Resolver; + action?: Resolver; + amount?: Resolver; + amountAfterFees?: Resolver< + ResolversTypes["BigDecimal"], + ParentType, + ContextType + >; + status?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export interface BigDecimalScalarConfig extends GraphQLScalarTypeConfig { - name: 'BigDecimal'; +export interface BigDecimalScalarConfig + extends GraphQLScalarTypeConfig { + name: "BigDecimal"; } -export interface BigIntScalarConfig extends GraphQLScalarTypeConfig { - name: 'BigInt'; +export interface BigIntScalarConfig + extends GraphQLScalarTypeConfig { + name: "BigInt"; } -export interface BytesScalarConfig extends GraphQLScalarTypeConfig { - name: 'Bytes'; +export interface BytesScalarConfig + extends GraphQLScalarTypeConfig { + name: "Bytes"; } -export type LTokenResolvers = ResolversObject<{ - id?: Resolver; - symbol?: Resolver; - decimals?: Resolver; - totalMintedRewards?: Resolver; - tvlUpdates?: Resolver>, ParentType, ContextType, RequireFields>; - aprUpdates?: Resolver>, ParentType, ContextType, RequireFields>; - activities?: Resolver>, ParentType, ContextType, RequireFields>; - rewardsMints?: Resolver>, ParentType, ContextType, RequireFields>; +export type LTokenResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["LToken"] = ResolversParentTypes["LToken"], +> = ResolversObject<{ + id?: Resolver; + symbol?: Resolver; + decimals?: Resolver; + totalMintedRewards?: Resolver< + ResolversTypes["BigDecimal"], + ParentType, + ContextType + >; + tvlUpdates?: Resolver< + Maybe>, + ParentType, + ContextType, + RequireFields + >; + aprUpdates?: Resolver< + Maybe>, + ParentType, + ContextType, + RequireFields + >; + activities?: Resolver< + Maybe>, + ParentType, + ContextType, + RequireFields + >; + rewardsMints?: Resolver< + Maybe>, + ParentType, + ContextType, + RequireFields + >; __isTypeOf?: IsTypeOfResolverFn; }>; -export type PreMiningLockResolvers = ResolversObject<{ - id?: Resolver; - amount?: Resolver; - duration?: Resolver; +export type PreMiningLockResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["PreMiningLock"] = ResolversParentTypes["PreMiningLock"], +> = ResolversObject<{ + id?: Resolver; + amount?: Resolver; + duration?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export type RewardsMintResolvers = ResolversObject<{ - id?: Resolver; - ltoken?: Resolver; - timestamp?: Resolver; - account?: Resolver; - balanceBefore?: Resolver; - revenue?: Resolver; - growth?: Resolver; +export type RewardsMintResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["RewardsMint"] = ResolversParentTypes["RewardsMint"], +> = ResolversObject<{ + id?: Resolver; + ltoken?: Resolver; + timestamp?: Resolver; + account?: Resolver; + balanceBefore?: Resolver< + ResolversTypes["BigDecimal"], + ParentType, + ContextType + >; + revenue?: Resolver; + growth?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export type TVLChangeResolvers = ResolversObject<{ - id?: Resolver; - ltoken?: Resolver; - timestamp?: Resolver; - amount?: Resolver; +export type TVLChangeResolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["TVLChange"] = ResolversParentTypes["TVLChange"], +> = ResolversObject<{ + id?: Resolver; + ltoken?: Resolver; + timestamp?: Resolver; + amount?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; -export type _Block_Resolvers = ResolversObject<{ - hash?: Resolver, ParentType, ContextType>; - number?: Resolver; - timestamp?: Resolver, ParentType, ContextType>; +export type _Block_Resolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["_Block_"] = ResolversParentTypes["_Block_"], +> = ResolversObject<{ + hash?: Resolver, ParentType, ContextType>; + number?: Resolver; + timestamp?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; -export type _Meta_Resolvers = ResolversObject<{ - block?: Resolver; - deployment?: Resolver; - hasIndexingErrors?: Resolver; +export type _Meta_Resolvers< + ContextType = MeshContext, + ParentType extends + ResolversParentTypes["_Meta_"] = ResolversParentTypes["_Meta_"], +> = ResolversObject<{ + block?: Resolver; + deployment?: Resolver; + hasIndexingErrors?: Resolver< + ResolversTypes["Boolean"], + ParentType, + ContextType + >; __isTypeOf?: IsTypeOfResolverFn; }>; -export interface Int8ScalarConfig extends GraphQLScalarTypeConfig { - name: 'Int8'; +export interface Int8ScalarConfig + extends GraphQLScalarTypeConfig { + name: "Int8"; } export type Resolvers = ResolversObject<{ @@ -1743,137 +2320,179 @@ export type DirectiveResolvers = ResolversObject<{ derivedFrom?: derivedFromDirectiveResolver; }>; -export type MeshContext = OkxX1TestnetTypes.Context & LineaTypes.Context & ArbitrumTypes.Context & BaseMeshContext; - +export type MeshContext = OkxX1TestnetTypes.Context & + LineaTypes.Context & + ArbitrumTypes.Context & + BaseMeshContext; -import { fileURLToPath } from '@graphql-mesh/utils'; -const baseDir = pathModule.join(pathModule.dirname(fileURLToPath(import.meta.url)), '..'); +import { fileURLToPath } from "@graphql-mesh/utils"; +const baseDir = pathModule.join( + pathModule.dirname(fileURLToPath(import.meta.url)), + "..", +); const importFn: ImportFn = (moduleId: string) => { - const relativeModuleId = (pathModule.isAbsolute(moduleId) ? pathModule.relative(baseDir, moduleId) : moduleId).split('\\').join('/').replace(baseDir + '/', ''); - switch(relativeModuleId) { + const relativeModuleId = ( + pathModule.isAbsolute(moduleId) + ? pathModule.relative(baseDir, moduleId) + : moduleId + ) + .split("\\") + .join("/") + .replace(baseDir + "/", ""); + switch (relativeModuleId) { case ".graphclient/sources/OKX_X1_Testnet/introspectionSchema": return Promise.resolve(importedModule$0) as T; - + case ".graphclient/sources/linea/introspectionSchema": return Promise.resolve(importedModule$1) as T; - + case ".graphclient/sources/arbitrum/introspectionSchema": return Promise.resolve(importedModule$2) as T; - + default: - return Promise.reject(new Error(`Cannot find module '${relativeModuleId}'.`)); + return Promise.reject( + new Error(`Cannot find module '${relativeModuleId}'.`), + ); } }; -const rootStore = new MeshStore('.graphclient', new FsStoreStorageAdapter({ - cwd: baseDir, - importFn, - fileType: "ts", -}), { - readonly: true, - validate: false -}); - -export const rawServeConfig: YamlConfig.Config['serve'] = undefined as any +const rootStore = new MeshStore( + ".graphclient", + new FsStoreStorageAdapter({ + cwd: baseDir, + importFn, + fileType: "ts", + }), + { + readonly: true, + validate: false, + }, +); + +export const rawServeConfig: YamlConfig.Config["serve"] = undefined as any; export async function getMeshOptions(): Promise { -const pubsub = new PubSub(); -const sourcesStore = rootStore.child('sources'); -const logger = new DefaultLogger("GraphClient"); -const cache = new (MeshCache as any)({ - ...({} as any), - importFn, - store: rootStore.child('cache'), - pubsub, - logger, - } as any) - -const sources: MeshResolvedSource[] = []; -const transforms: MeshTransform[] = []; -const additionalEnvelopPlugins: MeshPlugin[] = []; -const arbitrumTransforms = []; -const lineaTransforms = []; -const okxX1TestnetTransforms = []; -const additionalTypeDefs = [] as any[]; -const arbitrumHandler = new GraphqlHandler({ - name: "arbitrum", - config: {"endpoint":"https://gateway-arbitrum.network.thegraph.com/api/cfd41a9b70fcff12512d9fafecc0387d/subgraphs/id/eVibF32AJuoYG4DorvFTrJ6hH7ZxZdpMj1Jg6iAfbHb"}, - baseDir, - cache, - pubsub, - store: sourcesStore.child("arbitrum"), - logger: logger.child("arbitrum"), - importFn, - }); -const lineaHandler = new GraphqlHandler({ - name: "linea", - config: {"endpoint":"https://graph-query.linea.build/subgraphs/name/LedgityLabs/LedgityYield"}, - baseDir, - cache, - pubsub, - store: sourcesStore.child("linea"), - logger: logger.child("linea"), - importFn, - }); -const okxX1TestnetHandler = new GraphqlHandler({ - name: "OKX_X1_Testnet", - config: {"endpoint":"https://www.okx.com/api/v1/x1-testnet/index/subgraphs/name/LedgityLabs/LedgityYield"}, - baseDir, - cache, - pubsub, - store: sourcesStore.child("OKX_X1_Testnet"), - logger: logger.child("OKX_X1_Testnet"), - importFn, - }); -arbitrumTransforms[0] = new PrefixTransform({ - apiName: "arbitrum", - config: {"mode":"wrap","value":"c42161_","includeRootOperations":true,"includeTypes":false}, - baseDir, - cache, - pubsub, - importFn, - logger, - }); -lineaTransforms[0] = new PrefixTransform({ - apiName: "linea", - config: {"mode":"wrap","value":"c59144_","includeRootOperations":true,"includeTypes":false}, - baseDir, - cache, - pubsub, - importFn, - logger, - }); -okxX1TestnetTransforms[0] = new PrefixTransform({ - apiName: "OKX_X1_Testnet", - config: {"mode":"wrap","value":"c195_","includeRootOperations":true,"includeTypes":false}, - baseDir, - cache, - pubsub, - importFn, - logger, - }); -sources[0] = { - name: 'arbitrum', - handler: arbitrumHandler, - transforms: arbitrumTransforms - } -sources[1] = { - name: 'linea', - handler: lineaHandler, - transforms: lineaTransforms - } -sources[2] = { - name: 'OKX_X1_Testnet', - handler: okxX1TestnetHandler, - transforms: okxX1TestnetTransforms - } -const additionalResolvers = [] as any[] -const merger = new(StitchingMerger as any)({ - cache, - pubsub, - logger: logger.child('stitchingMerger'), - store: rootStore.child('stitchingMerger') - }) + const pubsub = new PubSub(); + const sourcesStore = rootStore.child("sources"); + const logger = new DefaultLogger("GraphClient"); + const cache = new (MeshCache as any)({ + ...({} as any), + importFn, + store: rootStore.child("cache"), + pubsub, + logger, + } as any); + + const sources: MeshResolvedSource[] = []; + const transforms: MeshTransform[] = []; + const additionalEnvelopPlugins: MeshPlugin[] = []; + const arbitrumTransforms = []; + const lineaTransforms = []; + const okxX1TestnetTransforms = []; + const additionalTypeDefs = [] as any[]; + const arbitrumHandler = new GraphqlHandler({ + name: "arbitrum", + config: { + endpoint: + "https://gateway-arbitrum.network.thegraph.com/api/cfd41a9b70fcff12512d9fafecc0387d/subgraphs/id/eVibF32AJuoYG4DorvFTrJ6hH7ZxZdpMj1Jg6iAfbHb", + }, + baseDir, + cache, + pubsub, + store: sourcesStore.child("arbitrum"), + logger: logger.child("arbitrum"), + importFn, + }); + const lineaHandler = new GraphqlHandler({ + name: "linea", + config: { + endpoint: + "https://graph-query.linea.build/subgraphs/name/LedgityLabs/LedgityYield", + }, + baseDir, + cache, + pubsub, + store: sourcesStore.child("linea"), + logger: logger.child("linea"), + importFn, + }); + const okxX1TestnetHandler = new GraphqlHandler({ + name: "OKX_X1_Testnet", + config: { + endpoint: + "https://www.okx.com/api/v1/x1-testnet/index/subgraphs/name/LedgityLabs/LedgityYield", + }, + baseDir, + cache, + pubsub, + store: sourcesStore.child("OKX_X1_Testnet"), + logger: logger.child("OKX_X1_Testnet"), + importFn, + }); + arbitrumTransforms[0] = new PrefixTransform({ + apiName: "arbitrum", + config: { + mode: "wrap", + value: "c42161_", + includeRootOperations: true, + includeTypes: false, + }, + baseDir, + cache, + pubsub, + importFn, + logger, + }); + lineaTransforms[0] = new PrefixTransform({ + apiName: "linea", + config: { + mode: "wrap", + value: "c59144_", + includeRootOperations: true, + includeTypes: false, + }, + baseDir, + cache, + pubsub, + importFn, + logger, + }); + okxX1TestnetTransforms[0] = new PrefixTransform({ + apiName: "OKX_X1_Testnet", + config: { + mode: "wrap", + value: "c195_", + includeRootOperations: true, + includeTypes: false, + }, + baseDir, + cache, + pubsub, + importFn, + logger, + }); + sources[0] = { + name: "arbitrum", + handler: arbitrumHandler, + transforms: arbitrumTransforms, + }; + sources[1] = { + name: "linea", + handler: lineaHandler, + transforms: lineaTransforms, + }; + sources[2] = { + name: "OKX_X1_Testnet", + handler: okxX1TestnetHandler, + transforms: okxX1TestnetTransforms, + }; + const additionalResolvers = [] as any[]; + const merger = new (StitchingMerger as any)({ + cache, + pubsub, + logger: logger.child("stitchingMerger"), + store: rootStore.child("stitchingMerger"), + }); return { sources, @@ -1886,38 +2505,41 @@ const merger = new(StitchingMerger as any)({ logger, additionalEnvelopPlugins, get documents() { - return [ - - ]; + return []; }, fetchFn, }; } -export function createBuiltMeshHTTPHandler(): MeshHTTPHandler { +export function createBuiltMeshHTTPHandler< + TServerContext = {}, +>(): MeshHTTPHandler { return createMeshHTTPHandler({ baseDir, getBuiltMesh: getBuiltGraphClient, rawServeConfig: undefined, - }) + }); } - let meshInstance$: Promise | undefined; export function getBuiltGraphClient(): Promise { if (meshInstance$ == null) { - meshInstance$ = getMeshOptions().then(meshOptions => getMesh(meshOptions)).then(mesh => { - const id = mesh.pubsub.subscribe('destroy', () => { - meshInstance$ = undefined; - mesh.pubsub.unsubscribe(id); + meshInstance$ = getMeshOptions() + .then((meshOptions) => getMesh(meshOptions)) + .then((mesh) => { + const id = mesh.pubsub.subscribe("destroy", () => { + meshInstance$ = undefined; + mesh.pubsub.unsubscribe(id); + }); + return mesh; }); - return mesh; - }); } return meshInstance$; } -export const execute: ExecuteMeshFn = (...args) => getBuiltGraphClient().then(({ execute }) => execute(...args)); +export const execute: ExecuteMeshFn = (...args) => + getBuiltGraphClient().then(({ execute }) => execute(...args)); -export const subscribe: SubscribeMeshFn = (...args) => getBuiltGraphClient().then(({ subscribe }) => subscribe(...args)); \ No newline at end of file +export const subscribe: SubscribeMeshFn = (...args) => + getBuiltGraphClient().then(({ subscribe }) => subscribe(...args)); diff --git a/.graphclient/schema.graphql b/.graphclient/schema.graphql index a5222a2d..263f6ace 100644 --- a/.graphclient/schema.graphql +++ b/.graphclient/schema.graphql @@ -169,7 +169,9 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c195__meta(block: Block_height): _Meta_ c59144_ltoken( id: ID! @@ -327,7 +329,9 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c59144__meta(block: Block_height): _Meta_ c42161_ltoken( id: ID! @@ -485,7 +489,9 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c42161__meta(block: Block_height): _Meta_ } @@ -646,7 +652,9 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c195__meta(block: Block_height): _Meta_ c59144_ltoken( id: ID! @@ -804,7 +812,9 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c59144__meta(block: Block_height): _Meta_ c42161_ltoken( id: ID! @@ -962,7 +972,9 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c42161__meta(block: Block_height): _Meta_ } @@ -1019,7 +1031,9 @@ input APRChange_filter { apr_lte: BigDecimal apr_in: [BigDecimal!] apr_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [APRChange_filter] or: [APRChange_filter] @@ -1136,7 +1150,9 @@ input Activity_filter { status_not: ActivityStatus status_in: [ActivityStatus!] status_not_in: [ActivityStatus!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter account_gt: Bytes account_lt: Bytes @@ -1183,10 +1199,34 @@ type LToken { symbol: String! decimals: Int! totalMintedRewards: BigDecimal! - tvlUpdates(skip: Int = 0, first: Int = 100, orderBy: TVLChange_orderBy, orderDirection: OrderDirection, where: TVLChange_filter): [TVLChange!] - aprUpdates(skip: Int = 0, first: Int = 100, orderBy: APRChange_orderBy, orderDirection: OrderDirection, where: APRChange_filter): [APRChange!] - activities(skip: Int = 0, first: Int = 100, orderBy: Activity_orderBy, orderDirection: OrderDirection, where: Activity_filter): [Activity!] - rewardsMints(skip: Int = 0, first: Int = 100, orderBy: RewardsMint_orderBy, orderDirection: OrderDirection, where: RewardsMint_filter): [RewardsMint!] + tvlUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: TVLChange_orderBy + orderDirection: OrderDirection + where: TVLChange_filter + ): [TVLChange!] + aprUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: APRChange_orderBy + orderDirection: OrderDirection + where: APRChange_filter + ): [APRChange!] + activities( + skip: Int = 0 + first: Int = 100 + orderBy: Activity_orderBy + orderDirection: OrderDirection + where: Activity_filter + ): [Activity!] + rewardsMints( + skip: Int = 0 + first: Int = 100 + orderBy: RewardsMint_orderBy + orderDirection: OrderDirection + where: RewardsMint_filter + ): [RewardsMint!] } input LToken_filter { @@ -1238,7 +1278,9 @@ input LToken_filter { aprUpdates_: APRChange_filter activities_: Activity_filter rewardsMints_: RewardsMint_filter - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [LToken_filter] or: [LToken_filter] @@ -1255,7 +1297,9 @@ enum LToken_orderBy { rewardsMints } -"""Defines the order direction, either ascending or descending""" +""" +Defines the order direction, either ascending or descending +""" enum OrderDirection { asc desc @@ -1292,7 +1336,9 @@ input PreMiningLock_filter { duration_lte: Int duration_in: [Int!] duration_not_in: [Int!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [PreMiningLock_filter] or: [PreMiningLock_filter] @@ -1382,7 +1428,9 @@ input RewardsMint_filter { growth_lte: BigDecimal growth_in: [BigDecimal!] growth_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter account_gt: Bytes account_lt: Bytes @@ -1459,7 +1507,9 @@ input TVLChange_filter { amount_lte: BigDecimal amount_in: [BigDecimal!] amount_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [TVLChange_filter] or: [TVLChange_filter] @@ -1477,32 +1527,45 @@ enum TVLChange_orderBy { } type _Block_ { - """The hash of the block""" + """ + The hash of the block + """ hash: Bytes - """The block number""" + """ + The block number + """ number: Int! - """Integer representation of the timestamp stored in blocks for the chain""" + """ + Integer representation of the timestamp stored in blocks for the chain + """ timestamp: Int } -"""The type for the top-level _meta field""" +""" +The type for the top-level _meta field +""" type _Meta_ { """ Information about a specific subgraph block. The hash of the block will be null if the _meta field has a block constraint that asks for a block number. It will be filled if the _meta field has no block constraint and therefore asks for the latest block - """ block: _Block_! - """The deployment ID""" + """ + The deployment ID + """ deployment: String! - """If `true`, the subgraph encountered indexing errors at some past block""" + """ + If `true`, the subgraph encountered indexing errors at some past block + """ hasIndexingErrors: Boolean! } enum _SubgraphErrorPolicy_ { - """Data will be returned even if the subgraph has indexing errors""" + """ + Data will be returned even if the subgraph has indexing errors + """ allow """ If the subgraph has indexing errors, data will be omitted. The default. @@ -1512,6 +1575,5 @@ enum _SubgraphErrorPolicy_ { """ 8 bytes signed integer - """ -scalar Int8 \ No newline at end of file +scalar Int8 diff --git a/.graphclient/sources/OKX_X1_Testnet/introspectionSchema.ts b/.graphclient/sources/OKX_X1_Testnet/introspectionSchema.ts index 59bdcedd..922da782 100644 --- a/.graphclient/sources/OKX_X1_Testnet/introspectionSchema.ts +++ b/.graphclient/sources/OKX_X1_Testnet/introspectionSchema.ts @@ -1,10026 +1,10081 @@ // @ts-nocheck -import { buildASTSchema } from 'graphql'; +import { buildASTSchema } from "graphql"; const schemaAST = { - "kind": "Document", - "definitions": [ + kind: "Document", + definitions: [ { - "kind": "SchemaDefinition", - "operationTypes": [ - { - "kind": "OperationTypeDefinition", - "operation": "query", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Query" - } - } - }, - { - "kind": "OperationTypeDefinition", - "operation": "subscription", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Subscription" - } - } - } + kind: "SchemaDefinition", + operationTypes: [ + { + kind: "OperationTypeDefinition", + operation: "query", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Query", + }, + }, + }, + { + kind: "OperationTypeDefinition", + operation: "subscription", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Subscription", + }, + }, + }, ], - "directives": [] + directives: [], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive." + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: + "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive.", }, - "name": { - "kind": "Name", - "value": "entity" + name: { + kind: "Name", + value: "entity", }, - "arguments": [], - "repeatable": false, - "locations": [ - { - "kind": "Name", - "value": "OBJECT" - } - ] + arguments: [], + repeatable: false, + locations: [ + { + kind: "Name", + value: "OBJECT", + }, + ], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "Defined a Subgraph ID for an object type" + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: "Defined a Subgraph ID for an object type", }, - "name": { - "kind": "Name", - "value": "subgraphId" + name: { + kind: "Name", + value: "subgraphId", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - } + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, ], - "repeatable": false, - "locations": [ + repeatable: false, + locations: [ { - "kind": "Name", - "value": "OBJECT" - } - ] + kind: "Name", + value: "OBJECT", + }, + ], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API." + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: + "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API.", }, - "name": { - "kind": "Name", - "value": "derivedFrom" + name: { + kind: "Name", + value: "derivedFrom", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "field" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - } + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "field", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, ], - "repeatable": false, - "locations": [ + repeatable: false, + locations: [ { - "kind": "Name", - "value": "FIELD_DEFINITION" - } - ] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "apr" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } + kind: "Name", + value: "FIELD_DEFINITION", + }, ], - "interfaces": [], - "directives": [] }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange_filter" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "APRChange", }, - "fields": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "FieldDefinition", + name: { + kind: "Name", + value: "apr", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "APRChange_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "apr" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "requestId" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "action" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "status" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "ActivityAction" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Deposit" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Withdraw" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "ActivityStatus" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Queued" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Cancelled" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Success" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Fulfilled" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity_filter" - }, - "fields": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + values: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "apr", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity_orderBy" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Activity", }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "requestId" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "requestId", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "account" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "action" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "action", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "status" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "status", }, - "directives": [] - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + }, + directives: [], + }, ], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "BigDecimal" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "ActivityAction", }, - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "BigInt" - }, - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - }, - "fields": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number_gte" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - } + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Deposit", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Withdraw", + }, + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Block_height" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "ActivityStatus", }, - "fields": [ + values: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "hash" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Queued", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Cancelled", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number_gte" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Success", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Fulfilled", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "Bytes" - }, - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken" + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "Activity_filter", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "symbol" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "decimals" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken_filter" - }, - "fields": [ + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_in" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "activities_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "symbol" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "description": { - "kind": "StringValue", - "value": "Defines the order direction, either ascending or descending", - "block": true - }, - "name": { - "kind": "Name", - "value": "OrderDirection" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "asc" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "desc" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "duration" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - }, - "fields": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "duration" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Query" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltokens" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchanges" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchanges" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activity" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "requestId", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "account", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "action", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "status", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "BigDecimal", + }, + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "BigInt", + }, + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number_gte", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "Block_height", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "hash", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "Bytes", + }, + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "LToken", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "symbol", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "decimals", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlUpdates", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprUpdates", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "LToken_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "tvlUpdates_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "aprUpdates_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "activities_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "rewardsMints_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "LToken_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "symbol", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "decimals", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "tvlUpdates", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "aprUpdates", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "activities", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + description: { + kind: "StringValue", + value: "Defines the order direction, either ascending or descending", + block: true, + }, + name: { + kind: "Name", + value: "OrderDirection", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "asc", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "desc", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "duration", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "duration", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Query", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltokens", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchanges", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchanges", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activity", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMint", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLock", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLocks", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "Access to subgraph metadata", + block: true, + }, + name: { + kind: "Name", + value: "_meta", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Meta_", + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "account", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "balanceBefore", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "revenue", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "growth", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMint" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLock" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLocks" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Access to subgraph metadata", - "block": true - }, - "name": { - "kind": "Name", - "value": "_meta" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Meta_" - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "revenue" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "growth" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - }, - "fields": [ + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_contains", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_contains", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_contains" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_lt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_lte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + name: { + kind: "Name", + value: "_change_block", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint_orderBy", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "account" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "balanceBefore", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "revenue" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "revenue", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "growth" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "growth", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Subscription" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Subscription", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltokens" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltokens", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchanges" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchanges", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchanges" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchanges", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activity", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activity" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, }, - "directives": [] - }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMint", + }, + arguments: [ { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMint" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLock", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLock" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLocks" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLocks", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "Access to subgraph metadata", + block: true, + }, + name: { + kind: "Name", + value: "_meta", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "block", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Access to subgraph metadata", - "block": true - }, - "name": { - "kind": "Name", - "value": "_meta" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - } + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Meta_" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Meta_", + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "TVLChange", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange_filter" + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "TVLChange_filter", }, - "fields": [ + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + name: { + kind: "Name", + value: "_change_block", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "TVLChange_orderBy", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "_Block_" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "_Block_", }, - "fields": [ - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The hash of the block", - "block": true - }, - "name": { - "kind": "Name", - "value": "hash" - }, - "arguments": [], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The block number", - "block": true - }, - "name": { - "kind": "Name", - "value": "number" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Integer representation of the timestamp stored in blocks for the chain", - "block": true - }, - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The hash of the block", + block: true, + }, + name: { + kind: "Name", + value: "hash", + }, + arguments: [], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The block number", + block: true, + }, + name: { + kind: "Name", + value: "number", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "Integer representation of the timestamp stored in blocks for the chain", + block: true, + }, + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ObjectTypeDefinition", - "description": { - "kind": "StringValue", - "value": "The type for the top-level _meta field", - "block": true + kind: "ObjectTypeDefinition", + description: { + kind: "StringValue", + value: "The type for the top-level _meta field", + block: true, }, - "name": { - "kind": "Name", - "value": "_Meta_" + name: { + kind: "Name", + value: "_Meta_", }, - "fields": [ - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Block_" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The deployment ID", - "block": true - }, - "name": { - "kind": "Name", - "value": "deployment" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "If `true`, the subgraph encountered indexing errors at some past block", - "block": true - }, - "name": { - "kind": "Name", - "value": "hasIndexingErrors" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Boolean" - } - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Block_", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The deployment ID", + block: true, + }, + name: { + kind: "Name", + value: "deployment", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "If `true`, the subgraph encountered indexing errors at some past block", + block: true, + }, + name: { + kind: "Name", + value: "hasIndexingErrors", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Boolean", + }, + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "description": { - "kind": "StringValue", - "value": "Data will be returned even if the subgraph has indexing errors", - "block": true + kind: "EnumValueDefinition", + description: { + kind: "StringValue", + value: + "Data will be returned even if the subgraph has indexing errors", + block: true, }, - "name": { - "kind": "Name", - "value": "allow" + name: { + kind: "Name", + value: "allow", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "description": { - "kind": "StringValue", - "value": "If the subgraph has indexing errors, data will be omitted. The default.", - "block": true + kind: "EnumValueDefinition", + description: { + kind: "StringValue", + value: + "If the subgraph has indexing errors, data will be omitted. The default.", + block: true, }, - "name": { - "kind": "Name", - "value": "deny" + name: { + kind: "Name", + value: "deny", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] - } - ] + directives: [], + }, + ], }; export default buildASTSchema(schemaAST, { assumeValid: true, - assumeValidSDL: true -}); \ No newline at end of file + assumeValidSDL: true, +}); diff --git a/.graphclient/sources/OKX_X1_Testnet/schema.graphql b/.graphclient/sources/OKX_X1_Testnet/schema.graphql index 1735f283..b5524ef8 100644 --- a/.graphclient/sources/OKX_X1_Testnet/schema.graphql +++ b/.graphclient/sources/OKX_X1_Testnet/schema.graphql @@ -65,7 +65,9 @@ input APRChange_filter { apr_lte: BigDecimal apr_in: [BigDecimal!] apr_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -176,7 +178,9 @@ input Activity_filter { status_not: ActivityStatus status_in: [ActivityStatus!] status_not_in: [ActivityStatus!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -213,10 +217,34 @@ type LToken { symbol: String! decimals: Int! totalMintedRewards: BigDecimal! - tvlUpdates(skip: Int = 0, first: Int = 100, orderBy: TVLChange_orderBy, orderDirection: OrderDirection, where: TVLChange_filter): [TVLChange!] - aprUpdates(skip: Int = 0, first: Int = 100, orderBy: APRChange_orderBy, orderDirection: OrderDirection, where: APRChange_filter): [APRChange!] - activities(skip: Int = 0, first: Int = 100, orderBy: Activity_orderBy, orderDirection: OrderDirection, where: Activity_filter): [Activity!] - rewardsMints(skip: Int = 0, first: Int = 100, orderBy: RewardsMint_orderBy, orderDirection: OrderDirection, where: RewardsMint_filter): [RewardsMint!] + tvlUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: TVLChange_orderBy + orderDirection: OrderDirection + where: TVLChange_filter + ): [TVLChange!] + aprUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: APRChange_orderBy + orderDirection: OrderDirection + where: APRChange_filter + ): [APRChange!] + activities( + skip: Int = 0 + first: Int = 100 + orderBy: Activity_orderBy + orderDirection: OrderDirection + where: Activity_filter + ): [Activity!] + rewardsMints( + skip: Int = 0 + first: Int = 100 + orderBy: RewardsMint_orderBy + orderDirection: OrderDirection + where: RewardsMint_filter + ): [RewardsMint!] } input LToken_filter { @@ -268,7 +296,9 @@ input LToken_filter { aprUpdates_: APRChange_filter activities_: Activity_filter rewardsMints_: RewardsMint_filter - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -283,7 +313,9 @@ enum LToken_orderBy { rewardsMints } -"""Defines the order direction, either ascending or descending""" +""" +Defines the order direction, either ascending or descending +""" enum OrderDirection { asc desc @@ -320,7 +352,9 @@ input PreMiningLock_filter { duration_lte: Int duration_in: [Int!] duration_not_in: [Int!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -487,7 +521,9 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c195__meta(block: Block_height): _Meta_ } @@ -569,7 +605,9 @@ input RewardsMint_filter { growth_lte: BigDecimal growth_in: [BigDecimal!] growth_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -740,7 +778,9 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c195__meta(block: Block_height): _Meta_ } @@ -797,7 +837,9 @@ input TVLChange_filter { amount_lte: BigDecimal amount_in: [BigDecimal!] amount_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -809,35 +851,48 @@ enum TVLChange_orderBy { } type _Block_ { - """The hash of the block""" + """ + The hash of the block + """ hash: Bytes - """The block number""" + """ + The block number + """ number: Int! - """Integer representation of the timestamp stored in blocks for the chain""" + """ + Integer representation of the timestamp stored in blocks for the chain + """ timestamp: Int } -"""The type for the top-level _meta field""" +""" +The type for the top-level _meta field +""" type _Meta_ { """ Information about a specific subgraph block. The hash of the block will be null if the _meta field has a block constraint that asks for a block number. It will be filled if the _meta field has no block constraint and therefore asks for the latest block - """ block: _Block_! - """The deployment ID""" + """ + The deployment ID + """ deployment: String! - """If `true`, the subgraph encountered indexing errors at some past block""" + """ + If `true`, the subgraph encountered indexing errors at some past block + """ hasIndexingErrors: Boolean! } enum _SubgraphErrorPolicy_ { - """Data will be returned even if the subgraph has indexing errors""" + """ + Data will be returned even if the subgraph has indexing errors + """ allow """ If the subgraph has indexing errors, data will be omitted. The default. """ deny -} \ No newline at end of file +} diff --git a/.graphclient/sources/OKX_X1_Testnet/types.ts b/.graphclient/sources/OKX_X1_Testnet/types.ts index f98cb1ba..2a3ae24d 100644 --- a/.graphclient/sources/OKX_X1_Testnet/types.ts +++ b/.graphclient/sources/OKX_X1_Testnet/types.ts @@ -1,876 +1,938 @@ // @ts-nocheck -import { InContextSdkMethod } from '@graphql-mesh/types'; -import { MeshContext } from '@graphql-mesh/runtime'; +import { InContextSdkMethod } from "@graphql-mesh/types"; +import { MeshContext } from "@graphql-mesh/runtime"; export namespace OkxX1TestnetTypes { export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - BigDecimal: any; - BigInt: any; - Bytes: any; -}; - -export type APRChange = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - apr: Scalars['BigDecimal']; -}; - -export type APRChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - apr?: InputMaybe; - apr_not?: InputMaybe; - apr_gt?: InputMaybe; - apr_lt?: InputMaybe; - apr_gte?: InputMaybe; - apr_lte?: InputMaybe; - apr_in?: InputMaybe>; - apr_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type APRChange_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'apr'; - -export type Activity = { - id: Scalars['ID']; - requestId: Scalars['BigInt']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - action: ActivityAction; - amount: Scalars['BigDecimal']; - amountAfterFees: Scalars['BigDecimal']; - status: ActivityStatus; -}; - -export type ActivityAction = - | 'Deposit' - | 'Withdraw'; - -export type ActivityStatus = - | 'Queued' - | 'Cancelled' - | 'Success' - | 'Fulfilled'; - -export type Activity_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - requestId?: InputMaybe; - requestId_not?: InputMaybe; - requestId_gt?: InputMaybe; - requestId_lt?: InputMaybe; - requestId_gte?: InputMaybe; - requestId_lte?: InputMaybe; - requestId_in?: InputMaybe>; - requestId_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - action?: InputMaybe; - action_not?: InputMaybe; - action_in?: InputMaybe>; - action_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - amountAfterFees?: InputMaybe; - amountAfterFees_not?: InputMaybe; - amountAfterFees_gt?: InputMaybe; - amountAfterFees_lt?: InputMaybe; - amountAfterFees_gte?: InputMaybe; - amountAfterFees_lte?: InputMaybe; - amountAfterFees_in?: InputMaybe>; - amountAfterFees_not_in?: InputMaybe>; - status?: InputMaybe; - status_not?: InputMaybe; - status_in?: InputMaybe>; - status_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type Activity_orderBy = - | 'id' - | 'requestId' - | 'ltoken' - | 'timestamp' - | 'account' - | 'action' - | 'amount' - | 'amountAfterFees' - | 'status'; - -export type BlockChangedFilter = { - number_gte: Scalars['Int']; -}; - -export type Block_height = { - hash?: InputMaybe; - number?: InputMaybe; - number_gte?: InputMaybe; -}; - -export type LToken = { - id: Scalars['ID']; - symbol: Scalars['String']; - decimals: Scalars['Int']; - totalMintedRewards: Scalars['BigDecimal']; - tvlUpdates?: Maybe>; - aprUpdates?: Maybe>; - activities?: Maybe>; - rewardsMints?: Maybe>; -}; - - -export type LTokentvlUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenaprUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenactivitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenrewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - -export type LToken_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - symbol?: InputMaybe; - symbol_not?: InputMaybe; - symbol_gt?: InputMaybe; - symbol_lt?: InputMaybe; - symbol_gte?: InputMaybe; - symbol_lte?: InputMaybe; - symbol_in?: InputMaybe>; - symbol_not_in?: InputMaybe>; - symbol_contains?: InputMaybe; - symbol_contains_nocase?: InputMaybe; - symbol_not_contains?: InputMaybe; - symbol_not_contains_nocase?: InputMaybe; - symbol_starts_with?: InputMaybe; - symbol_starts_with_nocase?: InputMaybe; - symbol_not_starts_with?: InputMaybe; - symbol_not_starts_with_nocase?: InputMaybe; - symbol_ends_with?: InputMaybe; - symbol_ends_with_nocase?: InputMaybe; - symbol_not_ends_with?: InputMaybe; - symbol_not_ends_with_nocase?: InputMaybe; - decimals?: InputMaybe; - decimals_not?: InputMaybe; - decimals_gt?: InputMaybe; - decimals_lt?: InputMaybe; - decimals_gte?: InputMaybe; - decimals_lte?: InputMaybe; - decimals_in?: InputMaybe>; - decimals_not_in?: InputMaybe>; - totalMintedRewards?: InputMaybe; - totalMintedRewards_not?: InputMaybe; - totalMintedRewards_gt?: InputMaybe; - totalMintedRewards_lt?: InputMaybe; - totalMintedRewards_gte?: InputMaybe; - totalMintedRewards_lte?: InputMaybe; - totalMintedRewards_in?: InputMaybe>; - totalMintedRewards_not_in?: InputMaybe>; - tvlUpdates_?: InputMaybe; - aprUpdates_?: InputMaybe; - activities_?: InputMaybe; - rewardsMints_?: InputMaybe; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type LToken_orderBy = - | 'id' - | 'symbol' - | 'decimals' - | 'totalMintedRewards' - | 'tvlUpdates' - | 'aprUpdates' - | 'activities' - | 'rewardsMints'; - -/** Defines the order direction, either ascending or descending */ -export type OrderDirection = - | 'asc' - | 'desc'; - -export type PreMiningLock = { - id: Scalars['ID']; - amount: Scalars['BigDecimal']; - duration: Scalars['Int']; -}; - -export type PreMiningLock_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - duration?: InputMaybe; - duration_not?: InputMaybe; - duration_gt?: InputMaybe; - duration_lt?: InputMaybe; - duration_gte?: InputMaybe; - duration_lte?: InputMaybe; - duration_in?: InputMaybe>; - duration_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type PreMiningLock_orderBy = - | 'id' - | 'amount' - | 'duration'; - -export type Query = { - c195_ltoken?: Maybe; - c195_ltokens: Array; - c195_tvlchange?: Maybe; - c195_tvlchanges: Array; - c195_aprchange?: Maybe; - c195_aprchanges: Array; - c195_activity?: Maybe; - c195_activities: Array; - c195_rewardsMint?: Maybe; - c195_rewardsMints: Array; - c195_preMiningLock?: Maybe; - c195_preMiningLocks: Array; - /** Access to subgraph metadata */ - c195__meta?: Maybe<_Meta_>; -}; - - -export type Queryc195_ltokenArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_tvlchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_aprchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_activityArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_rewardsMintArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_preMiningLockArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc195__metaArgs = { - block?: InputMaybe; -}; - -export type RewardsMint = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - balanceBefore: Scalars['BigDecimal']; - revenue: Scalars['BigDecimal']; - growth: Scalars['BigDecimal']; -}; - -export type RewardsMint_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - balanceBefore?: InputMaybe; - balanceBefore_not?: InputMaybe; - balanceBefore_gt?: InputMaybe; - balanceBefore_lt?: InputMaybe; - balanceBefore_gte?: InputMaybe; - balanceBefore_lte?: InputMaybe; - balanceBefore_in?: InputMaybe>; - balanceBefore_not_in?: InputMaybe>; - revenue?: InputMaybe; - revenue_not?: InputMaybe; - revenue_gt?: InputMaybe; - revenue_lt?: InputMaybe; - revenue_gte?: InputMaybe; - revenue_lte?: InputMaybe; - revenue_in?: InputMaybe>; - revenue_not_in?: InputMaybe>; - growth?: InputMaybe; - growth_not?: InputMaybe; - growth_gt?: InputMaybe; - growth_lt?: InputMaybe; - growth_gte?: InputMaybe; - growth_lte?: InputMaybe; - growth_in?: InputMaybe>; - growth_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type RewardsMint_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'account' - | 'balanceBefore' - | 'revenue' - | 'growth'; - -export type Subscription = { - c195_ltoken?: Maybe; - c195_ltokens: Array; - c195_tvlchange?: Maybe; - c195_tvlchanges: Array; - c195_aprchange?: Maybe; - c195_aprchanges: Array; - c195_activity?: Maybe; - c195_activities: Array; - c195_rewardsMint?: Maybe; - c195_rewardsMints: Array; - c195_preMiningLock?: Maybe; - c195_preMiningLocks: Array; - /** Access to subgraph metadata */ - c195__meta?: Maybe<_Meta_>; -}; - - -export type Subscriptionc195_ltokenArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_tvlchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_aprchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_activityArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_rewardsMintArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_preMiningLockArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc195__metaArgs = { - block?: InputMaybe; -}; - -export type TVLChange = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - amount: Scalars['BigDecimal']; -}; - -export type TVLChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type TVLChange_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'amount'; - -export type _Block_ = { - /** The hash of the block */ - hash?: Maybe; - /** The block number */ - number: Scalars['Int']; - /** Integer representation of the timestamp stored in blocks for the chain */ - timestamp?: Maybe; -}; - -/** The type for the top-level _meta field */ -export type _Meta_ = { - /** - * Information about a specific subgraph block. The hash of the block - * will be null if the _meta field has a block constraint that asks for - * a block number. It will be filled if the _meta field has no block constraint - * and therefore asks for the latest block - * - */ - block: _Block_; - /** The deployment ID */ - deployment: Scalars['String']; - /** If `true`, the subgraph encountered indexing errors at some past block */ - hasIndexingErrors: Scalars['Boolean']; -}; - -export type _SubgraphErrorPolicy_ = - /** Data will be returned even if the subgraph has indexing errors */ - | 'allow' - /** If the subgraph has indexing errors, data will be omitted. The default. */ - | 'deny'; + export type InputMaybe = Maybe; + export type Exact = { + [K in keyof T]: T[K]; + }; + export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; + }; + export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; + }; + /** All built-in and custom scalars, mapped to their actual values */ + export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: any; + BigInt: any; + Bytes: any; + }; + + export type APRChange = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + apr: Scalars["BigDecimal"]; + }; + + export type APRChange_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + apr?: InputMaybe; + apr_not?: InputMaybe; + apr_gt?: InputMaybe; + apr_lt?: InputMaybe; + apr_gte?: InputMaybe; + apr_lte?: InputMaybe; + apr_in?: InputMaybe>; + apr_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type APRChange_orderBy = "id" | "ltoken" | "timestamp" | "apr"; + + export type Activity = { + id: Scalars["ID"]; + requestId: Scalars["BigInt"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + action: ActivityAction; + amount: Scalars["BigDecimal"]; + amountAfterFees: Scalars["BigDecimal"]; + status: ActivityStatus; + }; + + export type ActivityAction = "Deposit" | "Withdraw"; + + export type ActivityStatus = "Queued" | "Cancelled" | "Success" | "Fulfilled"; + + export type Activity_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + requestId?: InputMaybe; + requestId_not?: InputMaybe; + requestId_gt?: InputMaybe; + requestId_lt?: InputMaybe; + requestId_gte?: InputMaybe; + requestId_lte?: InputMaybe; + requestId_in?: InputMaybe>; + requestId_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + action?: InputMaybe; + action_not?: InputMaybe; + action_in?: InputMaybe>; + action_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + amountAfterFees?: InputMaybe; + amountAfterFees_not?: InputMaybe; + amountAfterFees_gt?: InputMaybe; + amountAfterFees_lt?: InputMaybe; + amountAfterFees_gte?: InputMaybe; + amountAfterFees_lte?: InputMaybe; + amountAfterFees_in?: InputMaybe>; + amountAfterFees_not_in?: InputMaybe>; + status?: InputMaybe; + status_not?: InputMaybe; + status_in?: InputMaybe>; + status_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type Activity_orderBy = + | "id" + | "requestId" + | "ltoken" + | "timestamp" + | "account" + | "action" + | "amount" + | "amountAfterFees" + | "status"; + + export type BlockChangedFilter = { + number_gte: Scalars["Int"]; + }; + + export type Block_height = { + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; + }; + + export type LToken = { + id: Scalars["ID"]; + symbol: Scalars["String"]; + decimals: Scalars["Int"]; + totalMintedRewards: Scalars["BigDecimal"]; + tvlUpdates?: Maybe>; + aprUpdates?: Maybe>; + activities?: Maybe>; + rewardsMints?: Maybe>; + }; + + export type LTokentvlUpdatesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenaprUpdatesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenactivitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenrewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LToken_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + symbol?: InputMaybe; + symbol_not?: InputMaybe; + symbol_gt?: InputMaybe; + symbol_lt?: InputMaybe; + symbol_gte?: InputMaybe; + symbol_lte?: InputMaybe; + symbol_in?: InputMaybe>; + symbol_not_in?: InputMaybe>; + symbol_contains?: InputMaybe; + symbol_contains_nocase?: InputMaybe; + symbol_not_contains?: InputMaybe; + symbol_not_contains_nocase?: InputMaybe; + symbol_starts_with?: InputMaybe; + symbol_starts_with_nocase?: InputMaybe; + symbol_not_starts_with?: InputMaybe; + symbol_not_starts_with_nocase?: InputMaybe; + symbol_ends_with?: InputMaybe; + symbol_ends_with_nocase?: InputMaybe; + symbol_not_ends_with?: InputMaybe; + symbol_not_ends_with_nocase?: InputMaybe; + decimals?: InputMaybe; + decimals_not?: InputMaybe; + decimals_gt?: InputMaybe; + decimals_lt?: InputMaybe; + decimals_gte?: InputMaybe; + decimals_lte?: InputMaybe; + decimals_in?: InputMaybe>; + decimals_not_in?: InputMaybe>; + totalMintedRewards?: InputMaybe; + totalMintedRewards_not?: InputMaybe; + totalMintedRewards_gt?: InputMaybe; + totalMintedRewards_lt?: InputMaybe; + totalMintedRewards_gte?: InputMaybe; + totalMintedRewards_lte?: InputMaybe; + totalMintedRewards_in?: InputMaybe>; + totalMintedRewards_not_in?: InputMaybe>; + tvlUpdates_?: InputMaybe; + aprUpdates_?: InputMaybe; + activities_?: InputMaybe; + rewardsMints_?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type LToken_orderBy = + | "id" + | "symbol" + | "decimals" + | "totalMintedRewards" + | "tvlUpdates" + | "aprUpdates" + | "activities" + | "rewardsMints"; + + /** Defines the order direction, either ascending or descending */ + export type OrderDirection = "asc" | "desc"; + + export type PreMiningLock = { + id: Scalars["ID"]; + amount: Scalars["BigDecimal"]; + duration: Scalars["Int"]; + }; + + export type PreMiningLock_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + duration?: InputMaybe; + duration_not?: InputMaybe; + duration_gt?: InputMaybe; + duration_lt?: InputMaybe; + duration_gte?: InputMaybe; + duration_lte?: InputMaybe; + duration_in?: InputMaybe>; + duration_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type PreMiningLock_orderBy = "id" | "amount" | "duration"; + + export type Query = { + c195_ltoken?: Maybe; + c195_ltokens: Array; + c195_tvlchange?: Maybe; + c195_tvlchanges: Array; + c195_aprchange?: Maybe; + c195_aprchanges: Array; + c195_activity?: Maybe; + c195_activities: Array; + c195_rewardsMint?: Maybe; + c195_rewardsMints: Array; + c195_preMiningLock?: Maybe; + c195_preMiningLocks: Array; + /** Access to subgraph metadata */ + c195__meta?: Maybe<_Meta_>; + }; + + export type Queryc195_ltokenArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_ltokensArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_tvlchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_tvlchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_aprchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_aprchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_activityArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_activitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_rewardsMintArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_rewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_preMiningLockArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195_preMiningLocksArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc195__metaArgs = { + block?: InputMaybe; + }; + + export type RewardsMint = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + balanceBefore: Scalars["BigDecimal"]; + revenue: Scalars["BigDecimal"]; + growth: Scalars["BigDecimal"]; + }; + + export type RewardsMint_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + balanceBefore?: InputMaybe; + balanceBefore_not?: InputMaybe; + balanceBefore_gt?: InputMaybe; + balanceBefore_lt?: InputMaybe; + balanceBefore_gte?: InputMaybe; + balanceBefore_lte?: InputMaybe; + balanceBefore_in?: InputMaybe>; + balanceBefore_not_in?: InputMaybe>; + revenue?: InputMaybe; + revenue_not?: InputMaybe; + revenue_gt?: InputMaybe; + revenue_lt?: InputMaybe; + revenue_gte?: InputMaybe; + revenue_lte?: InputMaybe; + revenue_in?: InputMaybe>; + revenue_not_in?: InputMaybe>; + growth?: InputMaybe; + growth_not?: InputMaybe; + growth_gt?: InputMaybe; + growth_lt?: InputMaybe; + growth_gte?: InputMaybe; + growth_lte?: InputMaybe; + growth_in?: InputMaybe>; + growth_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type RewardsMint_orderBy = + | "id" + | "ltoken" + | "timestamp" + | "account" + | "balanceBefore" + | "revenue" + | "growth"; + + export type Subscription = { + c195_ltoken?: Maybe; + c195_ltokens: Array; + c195_tvlchange?: Maybe; + c195_tvlchanges: Array; + c195_aprchange?: Maybe; + c195_aprchanges: Array; + c195_activity?: Maybe; + c195_activities: Array; + c195_rewardsMint?: Maybe; + c195_rewardsMints: Array; + c195_preMiningLock?: Maybe; + c195_preMiningLocks: Array; + /** Access to subgraph metadata */ + c195__meta?: Maybe<_Meta_>; + }; + + export type Subscriptionc195_ltokenArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_ltokensArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_tvlchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_tvlchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_aprchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_aprchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_activityArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_activitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_rewardsMintArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_rewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_preMiningLockArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195_preMiningLocksArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc195__metaArgs = { + block?: InputMaybe; + }; + + export type TVLChange = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + amount: Scalars["BigDecimal"]; + }; + + export type TVLChange_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type TVLChange_orderBy = "id" | "ltoken" | "timestamp" | "amount"; + + export type _Block_ = { + /** The hash of the block */ + hash?: Maybe; + /** The block number */ + number: Scalars["Int"]; + /** Integer representation of the timestamp stored in blocks for the chain */ + timestamp?: Maybe; + }; + + /** The type for the top-level _meta field */ + export type _Meta_ = { + /** + * Information about a specific subgraph block. The hash of the block + * will be null if the _meta field has a block constraint that asks for + * a block number. It will be filled if the _meta field has no block constraint + * and therefore asks for the latest block + * + */ + block: _Block_; + /** The deployment ID */ + deployment: Scalars["String"]; + /** If `true`, the subgraph encountered indexing errors at some past block */ + hasIndexingErrors: Scalars["Boolean"]; + }; + + export type _SubgraphErrorPolicy_ = + /** Data will be returned even if the subgraph has indexing errors */ + | "allow" + /** If the subgraph has indexing errors, data will be omitted. The default. */ + | "deny"; export type QuerySdk = { - /** null **/ - c195_ltoken: InContextSdkMethod, - /** null **/ - c195_ltokens: InContextSdkMethod, - /** null **/ - c195_tvlchange: InContextSdkMethod, - /** null **/ - c195_tvlchanges: InContextSdkMethod, - /** null **/ - c195_aprchange: InContextSdkMethod, - /** null **/ - c195_aprchanges: InContextSdkMethod, - /** null **/ - c195_activity: InContextSdkMethod, - /** null **/ - c195_activities: InContextSdkMethod, - /** null **/ - c195_rewardsMint: InContextSdkMethod, - /** null **/ - c195_rewardsMints: InContextSdkMethod, - /** null **/ - c195_preMiningLock: InContextSdkMethod, - /** null **/ - c195_preMiningLocks: InContextSdkMethod, - /** Access to subgraph metadata **/ - c195__meta: InContextSdkMethod - }; - - export type MutationSdk = { - + /** null **/ + c195_ltoken: InContextSdkMethod< + Query["c195_ltoken"], + Queryc195_ltokenArgs, + MeshContext + >; + /** null **/ + c195_ltokens: InContextSdkMethod< + Query["c195_ltokens"], + Queryc195_ltokensArgs, + MeshContext + >; + /** null **/ + c195_tvlchange: InContextSdkMethod< + Query["c195_tvlchange"], + Queryc195_tvlchangeArgs, + MeshContext + >; + /** null **/ + c195_tvlchanges: InContextSdkMethod< + Query["c195_tvlchanges"], + Queryc195_tvlchangesArgs, + MeshContext + >; + /** null **/ + c195_aprchange: InContextSdkMethod< + Query["c195_aprchange"], + Queryc195_aprchangeArgs, + MeshContext + >; + /** null **/ + c195_aprchanges: InContextSdkMethod< + Query["c195_aprchanges"], + Queryc195_aprchangesArgs, + MeshContext + >; + /** null **/ + c195_activity: InContextSdkMethod< + Query["c195_activity"], + Queryc195_activityArgs, + MeshContext + >; + /** null **/ + c195_activities: InContextSdkMethod< + Query["c195_activities"], + Queryc195_activitiesArgs, + MeshContext + >; + /** null **/ + c195_rewardsMint: InContextSdkMethod< + Query["c195_rewardsMint"], + Queryc195_rewardsMintArgs, + MeshContext + >; + /** null **/ + c195_rewardsMints: InContextSdkMethod< + Query["c195_rewardsMints"], + Queryc195_rewardsMintsArgs, + MeshContext + >; + /** null **/ + c195_preMiningLock: InContextSdkMethod< + Query["c195_preMiningLock"], + Queryc195_preMiningLockArgs, + MeshContext + >; + /** null **/ + c195_preMiningLocks: InContextSdkMethod< + Query["c195_preMiningLocks"], + Queryc195_preMiningLocksArgs, + MeshContext + >; + /** Access to subgraph metadata **/ + c195__meta: InContextSdkMethod< + Query["c195__meta"], + Queryc195__metaArgs, + MeshContext + >; }; + export type MutationSdk = {}; + export type SubscriptionSdk = { - /** null **/ - c195_ltoken: InContextSdkMethod, - /** null **/ - c195_ltokens: InContextSdkMethod, - /** null **/ - c195_tvlchange: InContextSdkMethod, - /** null **/ - c195_tvlchanges: InContextSdkMethod, - /** null **/ - c195_aprchange: InContextSdkMethod, - /** null **/ - c195_aprchanges: InContextSdkMethod, - /** null **/ - c195_activity: InContextSdkMethod, - /** null **/ - c195_activities: InContextSdkMethod, - /** null **/ - c195_rewardsMint: InContextSdkMethod, - /** null **/ - c195_rewardsMints: InContextSdkMethod, - /** null **/ - c195_preMiningLock: InContextSdkMethod, - /** null **/ - c195_preMiningLocks: InContextSdkMethod, - /** Access to subgraph metadata **/ - c195__meta: InContextSdkMethod + /** null **/ + c195_ltoken: InContextSdkMethod< + Subscription["c195_ltoken"], + Subscriptionc195_ltokenArgs, + MeshContext + >; + /** null **/ + c195_ltokens: InContextSdkMethod< + Subscription["c195_ltokens"], + Subscriptionc195_ltokensArgs, + MeshContext + >; + /** null **/ + c195_tvlchange: InContextSdkMethod< + Subscription["c195_tvlchange"], + Subscriptionc195_tvlchangeArgs, + MeshContext + >; + /** null **/ + c195_tvlchanges: InContextSdkMethod< + Subscription["c195_tvlchanges"], + Subscriptionc195_tvlchangesArgs, + MeshContext + >; + /** null **/ + c195_aprchange: InContextSdkMethod< + Subscription["c195_aprchange"], + Subscriptionc195_aprchangeArgs, + MeshContext + >; + /** null **/ + c195_aprchanges: InContextSdkMethod< + Subscription["c195_aprchanges"], + Subscriptionc195_aprchangesArgs, + MeshContext + >; + /** null **/ + c195_activity: InContextSdkMethod< + Subscription["c195_activity"], + Subscriptionc195_activityArgs, + MeshContext + >; + /** null **/ + c195_activities: InContextSdkMethod< + Subscription["c195_activities"], + Subscriptionc195_activitiesArgs, + MeshContext + >; + /** null **/ + c195_rewardsMint: InContextSdkMethod< + Subscription["c195_rewardsMint"], + Subscriptionc195_rewardsMintArgs, + MeshContext + >; + /** null **/ + c195_rewardsMints: InContextSdkMethod< + Subscription["c195_rewardsMints"], + Subscriptionc195_rewardsMintsArgs, + MeshContext + >; + /** null **/ + c195_preMiningLock: InContextSdkMethod< + Subscription["c195_preMiningLock"], + Subscriptionc195_preMiningLockArgs, + MeshContext + >; + /** null **/ + c195_preMiningLocks: InContextSdkMethod< + Subscription["c195_preMiningLocks"], + Subscriptionc195_preMiningLocksArgs, + MeshContext + >; + /** Access to subgraph metadata **/ + c195__meta: InContextSdkMethod< + Subscription["c195__meta"], + Subscriptionc195__metaArgs, + MeshContext + >; }; export type Context = { - ["OKX_X1_Testnet"]: { Query: QuerySdk, Mutation: MutationSdk, Subscription: SubscriptionSdk }, - + ["OKX_X1_Testnet"]: { + Query: QuerySdk; + Mutation: MutationSdk; + Subscription: SubscriptionSdk; }; + }; } diff --git a/.graphclient/sources/arbitrum/introspectionSchema.ts b/.graphclient/sources/arbitrum/introspectionSchema.ts index 08af4466..7995bc75 100644 --- a/.graphclient/sources/arbitrum/introspectionSchema.ts +++ b/.graphclient/sources/arbitrum/introspectionSchema.ts @@ -1,10503 +1,10558 @@ // @ts-nocheck -import { buildASTSchema } from 'graphql'; +import { buildASTSchema } from "graphql"; const schemaAST = { - "kind": "Document", - "definitions": [ + kind: "Document", + definitions: [ { - "kind": "SchemaDefinition", - "operationTypes": [ - { - "kind": "OperationTypeDefinition", - "operation": "query", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Query" - } - } - }, - { - "kind": "OperationTypeDefinition", - "operation": "subscription", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Subscription" - } - } - } + kind: "SchemaDefinition", + operationTypes: [ + { + kind: "OperationTypeDefinition", + operation: "query", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Query", + }, + }, + }, + { + kind: "OperationTypeDefinition", + operation: "subscription", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Subscription", + }, + }, + }, ], - "directives": [] + directives: [], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive." + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: + "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive.", }, - "name": { - "kind": "Name", - "value": "entity" + name: { + kind: "Name", + value: "entity", }, - "arguments": [], - "repeatable": false, - "locations": [ - { - "kind": "Name", - "value": "OBJECT" - } - ] + arguments: [], + repeatable: false, + locations: [ + { + kind: "Name", + value: "OBJECT", + }, + ], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "Defined a Subgraph ID for an object type" + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: "Defined a Subgraph ID for an object type", }, - "name": { - "kind": "Name", - "value": "subgraphId" + name: { + kind: "Name", + value: "subgraphId", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - } + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, ], - "repeatable": false, - "locations": [ + repeatable: false, + locations: [ { - "kind": "Name", - "value": "OBJECT" - } - ] + kind: "Name", + value: "OBJECT", + }, + ], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API." + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: + "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API.", }, - "name": { - "kind": "Name", - "value": "derivedFrom" + name: { + kind: "Name", + value: "derivedFrom", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "field" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - } + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "field", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, ], - "repeatable": false, - "locations": [ + repeatable: false, + locations: [ { - "kind": "Name", - "value": "FIELD_DEFINITION" - } - ] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "apr" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } + kind: "Name", + value: "FIELD_DEFINITION", + }, ], - "interfaces": [], - "directives": [] }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange_filter" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "APRChange", }, - "fields": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "FieldDefinition", + name: { + kind: "Name", + value: "apr", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "APRChange_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "and" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "or" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__symbol" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__totalMintedRewards" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "apr" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "requestId" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "action" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "status" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "ActivityAction" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Deposit" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Withdraw" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "ActivityStatus" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Queued" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Cancelled" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Success" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Fulfilled" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity_filter" - }, - "fields": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "and", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "or", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, }, - "directives": [] + directives: [], }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + values: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__id", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__symbol", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__decimals", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__totalMintedRewards", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "apr", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Activity", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "requestId", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "FieldDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_in" + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "action", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - } + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amountAfterFees", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "FieldDefinition", + name: { + kind: "Name", + value: "status", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "and" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "or" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - } - }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "ActivityAction", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Deposit", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "requestId" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Withdraw", }, - "directives": [] + directives: [], }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "ActivityStatus", + }, + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Queued", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Cancelled", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__symbol" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Success", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__decimals" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Fulfilled", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "Activity_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__totalMintedRewards" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "account" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "action" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "status" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "BigDecimal" - }, - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "BigInt" - }, - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - }, - "fields": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number_gte" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Block_height" - }, - "fields": [ + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "hash" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "Bytes" - }, - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "description": { - "kind": "StringValue", - "value": "8 bytes signed integer\n", - "block": true - }, - "name": { - "kind": "Name", - "value": "Int8" - }, - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "symbol" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "decimals" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } - }, - "directives": [] + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken_filter" - }, - "fields": [ + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_in" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "activities_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "and" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "or" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - }, - "values": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "symbol" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "directives": [] + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_lte", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "description": { - "kind": "StringValue", - "value": "Defines the order direction, either ascending or descending", - "block": true - }, - "name": { - "kind": "Name", - "value": "OrderDirection" - }, - "values": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "asc" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "desc" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_in", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "duration" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - }, - "fields": [ + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_not", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "and" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "or" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "duration" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Query" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltokens" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchanges" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_not", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchanges" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_in", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "and", + }, + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "or", + }, + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "requestId", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__symbol", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__decimals", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__totalMintedRewards", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "account", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "action", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "status", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "BigDecimal", + }, + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "BigInt", + }, + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number_gte", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "Block_height", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "hash", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "Bytes", + }, + directives: [], + }, + { + kind: "ScalarTypeDefinition", + description: { + kind: "StringValue", + value: "8 bytes signed integer\n", + block: true, + }, + name: { + kind: "Name", + value: "Int8", + }, + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "LToken", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "symbol", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "decimals", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - "directives": [] }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlUpdates", + }, + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "name": { - "kind": "Name", - "value": "block" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] - }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "name": { - "kind": "Name", - "value": "subgraphError" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activity" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprUpdates", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, }, - "directives": [] }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", + }, + arguments: [ { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "name": { - "kind": "Name", - "value": "block" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] - }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "name": { - "kind": "Name", - "value": "subgraphError" + defaultValue: { + kind: "IntValue", + value: "100", }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMint" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", }, - "arguments": [ + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "LToken_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "tvlUpdates_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "aprUpdates_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "activities_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "rewardsMints_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "and", + }, + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "or", + }, + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "LToken_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "symbol", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "decimals", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "tvlUpdates", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "aprUpdates", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "activities", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + description: { + kind: "StringValue", + value: "Defines the order direction, either ascending or descending", + block: true, + }, + name: { + kind: "Name", + value: "OrderDirection", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "asc", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "desc", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "duration", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "and", + }, + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "or", + }, + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "duration", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Query", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltokens", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchanges", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchanges", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activity", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMint", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLock", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLocks", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "Access to subgraph metadata", + block: true, + }, + name: { + kind: "Name", + value: "_meta", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Meta_", + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "account", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "balanceBefore", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "revenue", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "growth", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLock" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLocks" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Access to subgraph metadata", - "block": true - }, - "name": { - "kind": "Name", - "value": "_meta" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Meta_" - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "revenue" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "growth" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - }, - "fields": [ + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_gt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_lt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_gte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_not", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_lte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "and", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "or", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "and" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "or" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - } - }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint_orderBy", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__symbol" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__symbol", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__decimals" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__decimals", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__totalMintedRewards" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__totalMintedRewards", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "account" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "balanceBefore", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "revenue" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "revenue", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "growth" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "growth", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Subscription" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Subscription", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltokens" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltokens", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchanges" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchanges", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchanges" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchanges", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activity", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activity" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMint", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMint" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", }, - "arguments": [ + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, }, - "directives": [] + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, }, - "directives": [] }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLock", + }, + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLock" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLocks" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLocks", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "Access to subgraph metadata", + block: true, + }, + name: { + kind: "Name", + value: "_meta", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "block", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Access to subgraph metadata", - "block": true - }, - "name": { - "kind": "Name", - "value": "_meta" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - } + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Meta_" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Meta_", + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "TVLChange", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange_filter" + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "TVLChange_filter", }, - "fields": [ + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "and", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "or", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "and" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "or" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - } - }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "TVLChange_orderBy", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__symbol" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__symbol", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__decimals" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__decimals", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken__totalMintedRewards" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken__totalMintedRewards", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "_Block_" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "_Block_", }, - "fields": [ - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The hash of the block", - "block": true - }, - "name": { - "kind": "Name", - "value": "hash" - }, - "arguments": [], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The block number", - "block": true - }, - "name": { - "kind": "Name", - "value": "number" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Integer representation of the timestamp stored in blocks for the chain", - "block": true - }, - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The hash of the block", + block: true, + }, + name: { + kind: "Name", + value: "hash", + }, + arguments: [], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The block number", + block: true, + }, + name: { + kind: "Name", + value: "number", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "Integer representation of the timestamp stored in blocks for the chain", + block: true, + }, + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ObjectTypeDefinition", - "description": { - "kind": "StringValue", - "value": "The type for the top-level _meta field", - "block": true + kind: "ObjectTypeDefinition", + description: { + kind: "StringValue", + value: "The type for the top-level _meta field", + block: true, }, - "name": { - "kind": "Name", - "value": "_Meta_" + name: { + kind: "Name", + value: "_Meta_", }, - "fields": [ - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Block_" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The deployment ID", - "block": true - }, - "name": { - "kind": "Name", - "value": "deployment" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "If `true`, the subgraph encountered indexing errors at some past block", - "block": true - }, - "name": { - "kind": "Name", - "value": "hasIndexingErrors" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Boolean" - } - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Block_", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The deployment ID", + block: true, + }, + name: { + kind: "Name", + value: "deployment", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "If `true`, the subgraph encountered indexing errors at some past block", + block: true, + }, + name: { + kind: "Name", + value: "hasIndexingErrors", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Boolean", + }, + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "description": { - "kind": "StringValue", - "value": "Data will be returned even if the subgraph has indexing errors", - "block": true + kind: "EnumValueDefinition", + description: { + kind: "StringValue", + value: + "Data will be returned even if the subgraph has indexing errors", + block: true, }, - "name": { - "kind": "Name", - "value": "allow" + name: { + kind: "Name", + value: "allow", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "description": { - "kind": "StringValue", - "value": "If the subgraph has indexing errors, data will be omitted. The default.", - "block": true + kind: "EnumValueDefinition", + description: { + kind: "StringValue", + value: + "If the subgraph has indexing errors, data will be omitted. The default.", + block: true, }, - "name": { - "kind": "Name", - "value": "deny" + name: { + kind: "Name", + value: "deny", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] - } - ] + directives: [], + }, + ], }; export default buildASTSchema(schemaAST, { assumeValid: true, - assumeValidSDL: true -}); \ No newline at end of file + assumeValidSDL: true, +}); diff --git a/.graphclient/sources/arbitrum/schema.graphql b/.graphclient/sources/arbitrum/schema.graphql index e199e635..670bb943 100644 --- a/.graphclient/sources/arbitrum/schema.graphql +++ b/.graphclient/sources/arbitrum/schema.graphql @@ -65,7 +65,9 @@ input APRChange_filter { apr_lte: BigDecimal apr_in: [BigDecimal!] apr_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [APRChange_filter] or: [APRChange_filter] @@ -186,7 +188,9 @@ input Activity_filter { status_not: ActivityStatus status_in: [ActivityStatus!] status_not_in: [ActivityStatus!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [Activity_filter] or: [Activity_filter] @@ -226,7 +230,6 @@ scalar Bytes """ 8 bytes signed integer - """ scalar Int8 @@ -235,10 +238,34 @@ type LToken { symbol: String! decimals: Int! totalMintedRewards: BigDecimal! - tvlUpdates(skip: Int = 0, first: Int = 100, orderBy: TVLChange_orderBy, orderDirection: OrderDirection, where: TVLChange_filter): [TVLChange!] - aprUpdates(skip: Int = 0, first: Int = 100, orderBy: APRChange_orderBy, orderDirection: OrderDirection, where: APRChange_filter): [APRChange!] - activities(skip: Int = 0, first: Int = 100, orderBy: Activity_orderBy, orderDirection: OrderDirection, where: Activity_filter): [Activity!] - rewardsMints(skip: Int = 0, first: Int = 100, orderBy: RewardsMint_orderBy, orderDirection: OrderDirection, where: RewardsMint_filter): [RewardsMint!] + tvlUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: TVLChange_orderBy + orderDirection: OrderDirection + where: TVLChange_filter + ): [TVLChange!] + aprUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: APRChange_orderBy + orderDirection: OrderDirection + where: APRChange_filter + ): [APRChange!] + activities( + skip: Int = 0 + first: Int = 100 + orderBy: Activity_orderBy + orderDirection: OrderDirection + where: Activity_filter + ): [Activity!] + rewardsMints( + skip: Int = 0 + first: Int = 100 + orderBy: RewardsMint_orderBy + orderDirection: OrderDirection + where: RewardsMint_filter + ): [RewardsMint!] } input LToken_filter { @@ -290,7 +317,9 @@ input LToken_filter { aprUpdates_: APRChange_filter activities_: Activity_filter rewardsMints_: RewardsMint_filter - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [LToken_filter] or: [LToken_filter] @@ -307,7 +336,9 @@ enum LToken_orderBy { rewardsMints } -"""Defines the order direction, either ascending or descending""" +""" +Defines the order direction, either ascending or descending +""" enum OrderDirection { asc desc @@ -344,7 +375,9 @@ input PreMiningLock_filter { duration_lte: Int duration_in: [Int!] duration_not_in: [Int!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [PreMiningLock_filter] or: [PreMiningLock_filter] @@ -513,7 +546,9 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c42161__meta(block: Block_height): _Meta_ } @@ -599,7 +634,9 @@ input RewardsMint_filter { growth_lte: BigDecimal growth_in: [BigDecimal!] growth_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [RewardsMint_filter] or: [RewardsMint_filter] @@ -776,7 +813,9 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c42161__meta(block: Block_height): _Meta_ } @@ -833,7 +872,9 @@ input TVLChange_filter { amount_lte: BigDecimal amount_in: [BigDecimal!] amount_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter and: [TVLChange_filter] or: [TVLChange_filter] @@ -851,35 +892,48 @@ enum TVLChange_orderBy { } type _Block_ { - """The hash of the block""" + """ + The hash of the block + """ hash: Bytes - """The block number""" + """ + The block number + """ number: Int! - """Integer representation of the timestamp stored in blocks for the chain""" + """ + Integer representation of the timestamp stored in blocks for the chain + """ timestamp: Int } -"""The type for the top-level _meta field""" +""" +The type for the top-level _meta field +""" type _Meta_ { """ Information about a specific subgraph block. The hash of the block will be null if the _meta field has a block constraint that asks for a block number. It will be filled if the _meta field has no block constraint and therefore asks for the latest block - """ block: _Block_! - """The deployment ID""" + """ + The deployment ID + """ deployment: String! - """If `true`, the subgraph encountered indexing errors at some past block""" + """ + If `true`, the subgraph encountered indexing errors at some past block + """ hasIndexingErrors: Boolean! } enum _SubgraphErrorPolicy_ { - """Data will be returned even if the subgraph has indexing errors""" + """ + Data will be returned even if the subgraph has indexing errors + """ allow """ If the subgraph has indexing errors, data will be omitted. The default. """ deny -} \ No newline at end of file +} diff --git a/.graphclient/sources/arbitrum/types.ts b/.graphclient/sources/arbitrum/types.ts index 869d0a30..de186572 100644 --- a/.graphclient/sources/arbitrum/types.ts +++ b/.graphclient/sources/arbitrum/types.ts @@ -1,913 +1,983 @@ // @ts-nocheck -import { InContextSdkMethod } from '@graphql-mesh/types'; -import { MeshContext } from '@graphql-mesh/runtime'; +import { InContextSdkMethod } from "@graphql-mesh/types"; +import { MeshContext } from "@graphql-mesh/runtime"; export namespace ArbitrumTypes { export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - BigDecimal: any; - BigInt: any; - Bytes: any; - Int8: any; -}; - -export type APRChange = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - apr: Scalars['BigDecimal']; -}; - -export type APRChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - apr?: InputMaybe; - apr_not?: InputMaybe; - apr_gt?: InputMaybe; - apr_lt?: InputMaybe; - apr_gte?: InputMaybe; - apr_lte?: InputMaybe; - apr_in?: InputMaybe>; - apr_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; - and?: InputMaybe>>; - or?: InputMaybe>>; -}; - -export type APRChange_orderBy = - | 'id' - | 'ltoken' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards' - | 'timestamp' - | 'apr'; - -export type Activity = { - id: Scalars['ID']; - requestId: Scalars['BigInt']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - action: ActivityAction; - amount: Scalars['BigDecimal']; - amountAfterFees: Scalars['BigDecimal']; - status: ActivityStatus; -}; - -export type ActivityAction = - | 'Deposit' - | 'Withdraw'; - -export type ActivityStatus = - | 'Queued' - | 'Cancelled' - | 'Success' - | 'Fulfilled'; - -export type Activity_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - requestId?: InputMaybe; - requestId_not?: InputMaybe; - requestId_gt?: InputMaybe; - requestId_lt?: InputMaybe; - requestId_gte?: InputMaybe; - requestId_lte?: InputMaybe; - requestId_in?: InputMaybe>; - requestId_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_gt?: InputMaybe; - account_lt?: InputMaybe; - account_gte?: InputMaybe; - account_lte?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - action?: InputMaybe; - action_not?: InputMaybe; - action_in?: InputMaybe>; - action_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - amountAfterFees?: InputMaybe; - amountAfterFees_not?: InputMaybe; - amountAfterFees_gt?: InputMaybe; - amountAfterFees_lt?: InputMaybe; - amountAfterFees_gte?: InputMaybe; - amountAfterFees_lte?: InputMaybe; - amountAfterFees_in?: InputMaybe>; - amountAfterFees_not_in?: InputMaybe>; - status?: InputMaybe; - status_not?: InputMaybe; - status_in?: InputMaybe>; - status_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; - and?: InputMaybe>>; - or?: InputMaybe>>; -}; - -export type Activity_orderBy = - | 'id' - | 'requestId' - | 'ltoken' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards' - | 'timestamp' - | 'account' - | 'action' - | 'amount' - | 'amountAfterFees' - | 'status'; - -export type BlockChangedFilter = { - number_gte: Scalars['Int']; -}; - -export type Block_height = { - hash?: InputMaybe; - number?: InputMaybe; - number_gte?: InputMaybe; -}; - -export type LToken = { - id: Scalars['ID']; - symbol: Scalars['String']; - decimals: Scalars['Int']; - totalMintedRewards: Scalars['BigDecimal']; - tvlUpdates?: Maybe>; - aprUpdates?: Maybe>; - activities?: Maybe>; - rewardsMints?: Maybe>; -}; - - -export type LTokentvlUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenaprUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenactivitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenrewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - -export type LToken_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - symbol?: InputMaybe; - symbol_not?: InputMaybe; - symbol_gt?: InputMaybe; - symbol_lt?: InputMaybe; - symbol_gte?: InputMaybe; - symbol_lte?: InputMaybe; - symbol_in?: InputMaybe>; - symbol_not_in?: InputMaybe>; - symbol_contains?: InputMaybe; - symbol_contains_nocase?: InputMaybe; - symbol_not_contains?: InputMaybe; - symbol_not_contains_nocase?: InputMaybe; - symbol_starts_with?: InputMaybe; - symbol_starts_with_nocase?: InputMaybe; - symbol_not_starts_with?: InputMaybe; - symbol_not_starts_with_nocase?: InputMaybe; - symbol_ends_with?: InputMaybe; - symbol_ends_with_nocase?: InputMaybe; - symbol_not_ends_with?: InputMaybe; - symbol_not_ends_with_nocase?: InputMaybe; - decimals?: InputMaybe; - decimals_not?: InputMaybe; - decimals_gt?: InputMaybe; - decimals_lt?: InputMaybe; - decimals_gte?: InputMaybe; - decimals_lte?: InputMaybe; - decimals_in?: InputMaybe>; - decimals_not_in?: InputMaybe>; - totalMintedRewards?: InputMaybe; - totalMintedRewards_not?: InputMaybe; - totalMintedRewards_gt?: InputMaybe; - totalMintedRewards_lt?: InputMaybe; - totalMintedRewards_gte?: InputMaybe; - totalMintedRewards_lte?: InputMaybe; - totalMintedRewards_in?: InputMaybe>; - totalMintedRewards_not_in?: InputMaybe>; - tvlUpdates_?: InputMaybe; - aprUpdates_?: InputMaybe; - activities_?: InputMaybe; - rewardsMints_?: InputMaybe; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; - and?: InputMaybe>>; - or?: InputMaybe>>; -}; - -export type LToken_orderBy = - | 'id' - | 'symbol' - | 'decimals' - | 'totalMintedRewards' - | 'tvlUpdates' - | 'aprUpdates' - | 'activities' - | 'rewardsMints'; - -/** Defines the order direction, either ascending or descending */ -export type OrderDirection = - | 'asc' - | 'desc'; - -export type PreMiningLock = { - id: Scalars['ID']; - amount: Scalars['BigDecimal']; - duration: Scalars['Int']; -}; - -export type PreMiningLock_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - duration?: InputMaybe; - duration_not?: InputMaybe; - duration_gt?: InputMaybe; - duration_lt?: InputMaybe; - duration_gte?: InputMaybe; - duration_lte?: InputMaybe; - duration_in?: InputMaybe>; - duration_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; - and?: InputMaybe>>; - or?: InputMaybe>>; -}; - -export type PreMiningLock_orderBy = - | 'id' - | 'amount' - | 'duration'; - -export type Query = { - c42161_ltoken?: Maybe; - c42161_ltokens: Array; - c42161_tvlchange?: Maybe; - c42161_tvlchanges: Array; - c42161_aprchange?: Maybe; - c42161_aprchanges: Array; - c42161_activity?: Maybe; - c42161_activities: Array; - c42161_rewardsMint?: Maybe; - c42161_rewardsMints: Array; - c42161_preMiningLock?: Maybe; - c42161_preMiningLocks: Array; - /** Access to subgraph metadata */ - c42161__meta?: Maybe<_Meta_>; -}; - - -export type Queryc42161_ltokenArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_tvlchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_aprchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_activityArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_rewardsMintArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_preMiningLockArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc42161__metaArgs = { - block?: InputMaybe; -}; - -export type RewardsMint = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - balanceBefore: Scalars['BigDecimal']; - revenue: Scalars['BigDecimal']; - growth: Scalars['BigDecimal']; -}; - -export type RewardsMint_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_gt?: InputMaybe; - account_lt?: InputMaybe; - account_gte?: InputMaybe; - account_lte?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - balanceBefore?: InputMaybe; - balanceBefore_not?: InputMaybe; - balanceBefore_gt?: InputMaybe; - balanceBefore_lt?: InputMaybe; - balanceBefore_gte?: InputMaybe; - balanceBefore_lte?: InputMaybe; - balanceBefore_in?: InputMaybe>; - balanceBefore_not_in?: InputMaybe>; - revenue?: InputMaybe; - revenue_not?: InputMaybe; - revenue_gt?: InputMaybe; - revenue_lt?: InputMaybe; - revenue_gte?: InputMaybe; - revenue_lte?: InputMaybe; - revenue_in?: InputMaybe>; - revenue_not_in?: InputMaybe>; - growth?: InputMaybe; - growth_not?: InputMaybe; - growth_gt?: InputMaybe; - growth_lt?: InputMaybe; - growth_gte?: InputMaybe; - growth_lte?: InputMaybe; - growth_in?: InputMaybe>; - growth_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; - and?: InputMaybe>>; - or?: InputMaybe>>; -}; - -export type RewardsMint_orderBy = - | 'id' - | 'ltoken' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards' - | 'timestamp' - | 'account' - | 'balanceBefore' - | 'revenue' - | 'growth'; - -export type Subscription = { - c42161_ltoken?: Maybe; - c42161_ltokens: Array; - c42161_tvlchange?: Maybe; - c42161_tvlchanges: Array; - c42161_aprchange?: Maybe; - c42161_aprchanges: Array; - c42161_activity?: Maybe; - c42161_activities: Array; - c42161_rewardsMint?: Maybe; - c42161_rewardsMints: Array; - c42161_preMiningLock?: Maybe; - c42161_preMiningLocks: Array; - /** Access to subgraph metadata */ - c42161__meta?: Maybe<_Meta_>; -}; - - -export type Subscriptionc42161_ltokenArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_tvlchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_aprchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_activityArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_rewardsMintArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_preMiningLockArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc42161__metaArgs = { - block?: InputMaybe; -}; - -export type TVLChange = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - amount: Scalars['BigDecimal']; -}; - -export type TVLChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; - and?: InputMaybe>>; - or?: InputMaybe>>; -}; - -export type TVLChange_orderBy = - | 'id' - | 'ltoken' - | 'ltoken__id' - | 'ltoken__symbol' - | 'ltoken__decimals' - | 'ltoken__totalMintedRewards' - | 'timestamp' - | 'amount'; - -export type _Block_ = { - /** The hash of the block */ - hash?: Maybe; - /** The block number */ - number: Scalars['Int']; - /** Integer representation of the timestamp stored in blocks for the chain */ - timestamp?: Maybe; -}; - -/** The type for the top-level _meta field */ -export type _Meta_ = { - /** - * Information about a specific subgraph block. The hash of the block - * will be null if the _meta field has a block constraint that asks for - * a block number. It will be filled if the _meta field has no block constraint - * and therefore asks for the latest block - * - */ - block: _Block_; - /** The deployment ID */ - deployment: Scalars['String']; - /** If `true`, the subgraph encountered indexing errors at some past block */ - hasIndexingErrors: Scalars['Boolean']; -}; - -export type _SubgraphErrorPolicy_ = - /** Data will be returned even if the subgraph has indexing errors */ - | 'allow' - /** If the subgraph has indexing errors, data will be omitted. The default. */ - | 'deny'; + export type InputMaybe = Maybe; + export type Exact = { + [K in keyof T]: T[K]; + }; + export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; + }; + export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; + }; + /** All built-in and custom scalars, mapped to their actual values */ + export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: any; + BigInt: any; + Bytes: any; + Int8: any; + }; + + export type APRChange = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + apr: Scalars["BigDecimal"]; + }; + + export type APRChange_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + apr?: InputMaybe; + apr_not?: InputMaybe; + apr_gt?: InputMaybe; + apr_lt?: InputMaybe; + apr_gte?: InputMaybe; + apr_lte?: InputMaybe; + apr_in?: InputMaybe>; + apr_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + or?: InputMaybe>>; + }; + + export type APRChange_orderBy = + | "id" + | "ltoken" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards" + | "timestamp" + | "apr"; + + export type Activity = { + id: Scalars["ID"]; + requestId: Scalars["BigInt"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + action: ActivityAction; + amount: Scalars["BigDecimal"]; + amountAfterFees: Scalars["BigDecimal"]; + status: ActivityStatus; + }; + + export type ActivityAction = "Deposit" | "Withdraw"; + + export type ActivityStatus = "Queued" | "Cancelled" | "Success" | "Fulfilled"; + + export type Activity_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + requestId?: InputMaybe; + requestId_not?: InputMaybe; + requestId_gt?: InputMaybe; + requestId_lt?: InputMaybe; + requestId_gte?: InputMaybe; + requestId_lte?: InputMaybe; + requestId_in?: InputMaybe>; + requestId_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_gt?: InputMaybe; + account_lt?: InputMaybe; + account_gte?: InputMaybe; + account_lte?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + action?: InputMaybe; + action_not?: InputMaybe; + action_in?: InputMaybe>; + action_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + amountAfterFees?: InputMaybe; + amountAfterFees_not?: InputMaybe; + amountAfterFees_gt?: InputMaybe; + amountAfterFees_lt?: InputMaybe; + amountAfterFees_gte?: InputMaybe; + amountAfterFees_lte?: InputMaybe; + amountAfterFees_in?: InputMaybe>; + amountAfterFees_not_in?: InputMaybe>; + status?: InputMaybe; + status_not?: InputMaybe; + status_in?: InputMaybe>; + status_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + or?: InputMaybe>>; + }; + + export type Activity_orderBy = + | "id" + | "requestId" + | "ltoken" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards" + | "timestamp" + | "account" + | "action" + | "amount" + | "amountAfterFees" + | "status"; + + export type BlockChangedFilter = { + number_gte: Scalars["Int"]; + }; + + export type Block_height = { + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; + }; + + export type LToken = { + id: Scalars["ID"]; + symbol: Scalars["String"]; + decimals: Scalars["Int"]; + totalMintedRewards: Scalars["BigDecimal"]; + tvlUpdates?: Maybe>; + aprUpdates?: Maybe>; + activities?: Maybe>; + rewardsMints?: Maybe>; + }; + + export type LTokentvlUpdatesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenaprUpdatesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenactivitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenrewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LToken_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + symbol?: InputMaybe; + symbol_not?: InputMaybe; + symbol_gt?: InputMaybe; + symbol_lt?: InputMaybe; + symbol_gte?: InputMaybe; + symbol_lte?: InputMaybe; + symbol_in?: InputMaybe>; + symbol_not_in?: InputMaybe>; + symbol_contains?: InputMaybe; + symbol_contains_nocase?: InputMaybe; + symbol_not_contains?: InputMaybe; + symbol_not_contains_nocase?: InputMaybe; + symbol_starts_with?: InputMaybe; + symbol_starts_with_nocase?: InputMaybe; + symbol_not_starts_with?: InputMaybe; + symbol_not_starts_with_nocase?: InputMaybe; + symbol_ends_with?: InputMaybe; + symbol_ends_with_nocase?: InputMaybe; + symbol_not_ends_with?: InputMaybe; + symbol_not_ends_with_nocase?: InputMaybe; + decimals?: InputMaybe; + decimals_not?: InputMaybe; + decimals_gt?: InputMaybe; + decimals_lt?: InputMaybe; + decimals_gte?: InputMaybe; + decimals_lte?: InputMaybe; + decimals_in?: InputMaybe>; + decimals_not_in?: InputMaybe>; + totalMintedRewards?: InputMaybe; + totalMintedRewards_not?: InputMaybe; + totalMintedRewards_gt?: InputMaybe; + totalMintedRewards_lt?: InputMaybe; + totalMintedRewards_gte?: InputMaybe; + totalMintedRewards_lte?: InputMaybe; + totalMintedRewards_in?: InputMaybe>; + totalMintedRewards_not_in?: InputMaybe>; + tvlUpdates_?: InputMaybe; + aprUpdates_?: InputMaybe; + activities_?: InputMaybe; + rewardsMints_?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + or?: InputMaybe>>; + }; + + export type LToken_orderBy = + | "id" + | "symbol" + | "decimals" + | "totalMintedRewards" + | "tvlUpdates" + | "aprUpdates" + | "activities" + | "rewardsMints"; + + /** Defines the order direction, either ascending or descending */ + export type OrderDirection = "asc" | "desc"; + + export type PreMiningLock = { + id: Scalars["ID"]; + amount: Scalars["BigDecimal"]; + duration: Scalars["Int"]; + }; + + export type PreMiningLock_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + duration?: InputMaybe; + duration_not?: InputMaybe; + duration_gt?: InputMaybe; + duration_lt?: InputMaybe; + duration_gte?: InputMaybe; + duration_lte?: InputMaybe; + duration_in?: InputMaybe>; + duration_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + or?: InputMaybe>>; + }; + + export type PreMiningLock_orderBy = "id" | "amount" | "duration"; + + export type Query = { + c42161_ltoken?: Maybe; + c42161_ltokens: Array; + c42161_tvlchange?: Maybe; + c42161_tvlchanges: Array; + c42161_aprchange?: Maybe; + c42161_aprchanges: Array; + c42161_activity?: Maybe; + c42161_activities: Array; + c42161_rewardsMint?: Maybe; + c42161_rewardsMints: Array; + c42161_preMiningLock?: Maybe; + c42161_preMiningLocks: Array; + /** Access to subgraph metadata */ + c42161__meta?: Maybe<_Meta_>; + }; + + export type Queryc42161_ltokenArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_ltokensArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_tvlchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_tvlchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_aprchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_aprchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_activityArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_activitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_rewardsMintArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_rewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_preMiningLockArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161_preMiningLocksArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc42161__metaArgs = { + block?: InputMaybe; + }; + + export type RewardsMint = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + balanceBefore: Scalars["BigDecimal"]; + revenue: Scalars["BigDecimal"]; + growth: Scalars["BigDecimal"]; + }; + + export type RewardsMint_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_gt?: InputMaybe; + account_lt?: InputMaybe; + account_gte?: InputMaybe; + account_lte?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + balanceBefore?: InputMaybe; + balanceBefore_not?: InputMaybe; + balanceBefore_gt?: InputMaybe; + balanceBefore_lt?: InputMaybe; + balanceBefore_gte?: InputMaybe; + balanceBefore_lte?: InputMaybe; + balanceBefore_in?: InputMaybe>; + balanceBefore_not_in?: InputMaybe>; + revenue?: InputMaybe; + revenue_not?: InputMaybe; + revenue_gt?: InputMaybe; + revenue_lt?: InputMaybe; + revenue_gte?: InputMaybe; + revenue_lte?: InputMaybe; + revenue_in?: InputMaybe>; + revenue_not_in?: InputMaybe>; + growth?: InputMaybe; + growth_not?: InputMaybe; + growth_gt?: InputMaybe; + growth_lt?: InputMaybe; + growth_gte?: InputMaybe; + growth_lte?: InputMaybe; + growth_in?: InputMaybe>; + growth_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + or?: InputMaybe>>; + }; + + export type RewardsMint_orderBy = + | "id" + | "ltoken" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards" + | "timestamp" + | "account" + | "balanceBefore" + | "revenue" + | "growth"; + + export type Subscription = { + c42161_ltoken?: Maybe; + c42161_ltokens: Array; + c42161_tvlchange?: Maybe; + c42161_tvlchanges: Array; + c42161_aprchange?: Maybe; + c42161_aprchanges: Array; + c42161_activity?: Maybe; + c42161_activities: Array; + c42161_rewardsMint?: Maybe; + c42161_rewardsMints: Array; + c42161_preMiningLock?: Maybe; + c42161_preMiningLocks: Array; + /** Access to subgraph metadata */ + c42161__meta?: Maybe<_Meta_>; + }; + + export type Subscriptionc42161_ltokenArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_ltokensArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_tvlchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_tvlchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_aprchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_aprchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_activityArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_activitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_rewardsMintArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_rewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_preMiningLockArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161_preMiningLocksArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc42161__metaArgs = { + block?: InputMaybe; + }; + + export type TVLChange = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + amount: Scalars["BigDecimal"]; + }; + + export type TVLChange_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + or?: InputMaybe>>; + }; + + export type TVLChange_orderBy = + | "id" + | "ltoken" + | "ltoken__id" + | "ltoken__symbol" + | "ltoken__decimals" + | "ltoken__totalMintedRewards" + | "timestamp" + | "amount"; + + export type _Block_ = { + /** The hash of the block */ + hash?: Maybe; + /** The block number */ + number: Scalars["Int"]; + /** Integer representation of the timestamp stored in blocks for the chain */ + timestamp?: Maybe; + }; + + /** The type for the top-level _meta field */ + export type _Meta_ = { + /** + * Information about a specific subgraph block. The hash of the block + * will be null if the _meta field has a block constraint that asks for + * a block number. It will be filled if the _meta field has no block constraint + * and therefore asks for the latest block + * + */ + block: _Block_; + /** The deployment ID */ + deployment: Scalars["String"]; + /** If `true`, the subgraph encountered indexing errors at some past block */ + hasIndexingErrors: Scalars["Boolean"]; + }; + + export type _SubgraphErrorPolicy_ = + /** Data will be returned even if the subgraph has indexing errors */ + | "allow" + /** If the subgraph has indexing errors, data will be omitted. The default. */ + | "deny"; export type QuerySdk = { - /** null **/ - c42161_ltoken: InContextSdkMethod, - /** null **/ - c42161_ltokens: InContextSdkMethod, - /** null **/ - c42161_tvlchange: InContextSdkMethod, - /** null **/ - c42161_tvlchanges: InContextSdkMethod, - /** null **/ - c42161_aprchange: InContextSdkMethod, - /** null **/ - c42161_aprchanges: InContextSdkMethod, - /** null **/ - c42161_activity: InContextSdkMethod, - /** null **/ - c42161_activities: InContextSdkMethod, - /** null **/ - c42161_rewardsMint: InContextSdkMethod, - /** null **/ - c42161_rewardsMints: InContextSdkMethod, - /** null **/ - c42161_preMiningLock: InContextSdkMethod, - /** null **/ - c42161_preMiningLocks: InContextSdkMethod, - /** Access to subgraph metadata **/ - c42161__meta: InContextSdkMethod - }; - - export type MutationSdk = { - + /** null **/ + c42161_ltoken: InContextSdkMethod< + Query["c42161_ltoken"], + Queryc42161_ltokenArgs, + MeshContext + >; + /** null **/ + c42161_ltokens: InContextSdkMethod< + Query["c42161_ltokens"], + Queryc42161_ltokensArgs, + MeshContext + >; + /** null **/ + c42161_tvlchange: InContextSdkMethod< + Query["c42161_tvlchange"], + Queryc42161_tvlchangeArgs, + MeshContext + >; + /** null **/ + c42161_tvlchanges: InContextSdkMethod< + Query["c42161_tvlchanges"], + Queryc42161_tvlchangesArgs, + MeshContext + >; + /** null **/ + c42161_aprchange: InContextSdkMethod< + Query["c42161_aprchange"], + Queryc42161_aprchangeArgs, + MeshContext + >; + /** null **/ + c42161_aprchanges: InContextSdkMethod< + Query["c42161_aprchanges"], + Queryc42161_aprchangesArgs, + MeshContext + >; + /** null **/ + c42161_activity: InContextSdkMethod< + Query["c42161_activity"], + Queryc42161_activityArgs, + MeshContext + >; + /** null **/ + c42161_activities: InContextSdkMethod< + Query["c42161_activities"], + Queryc42161_activitiesArgs, + MeshContext + >; + /** null **/ + c42161_rewardsMint: InContextSdkMethod< + Query["c42161_rewardsMint"], + Queryc42161_rewardsMintArgs, + MeshContext + >; + /** null **/ + c42161_rewardsMints: InContextSdkMethod< + Query["c42161_rewardsMints"], + Queryc42161_rewardsMintsArgs, + MeshContext + >; + /** null **/ + c42161_preMiningLock: InContextSdkMethod< + Query["c42161_preMiningLock"], + Queryc42161_preMiningLockArgs, + MeshContext + >; + /** null **/ + c42161_preMiningLocks: InContextSdkMethod< + Query["c42161_preMiningLocks"], + Queryc42161_preMiningLocksArgs, + MeshContext + >; + /** Access to subgraph metadata **/ + c42161__meta: InContextSdkMethod< + Query["c42161__meta"], + Queryc42161__metaArgs, + MeshContext + >; }; + export type MutationSdk = {}; + export type SubscriptionSdk = { - /** null **/ - c42161_ltoken: InContextSdkMethod, - /** null **/ - c42161_ltokens: InContextSdkMethod, - /** null **/ - c42161_tvlchange: InContextSdkMethod, - /** null **/ - c42161_tvlchanges: InContextSdkMethod, - /** null **/ - c42161_aprchange: InContextSdkMethod, - /** null **/ - c42161_aprchanges: InContextSdkMethod, - /** null **/ - c42161_activity: InContextSdkMethod, - /** null **/ - c42161_activities: InContextSdkMethod, - /** null **/ - c42161_rewardsMint: InContextSdkMethod, - /** null **/ - c42161_rewardsMints: InContextSdkMethod, - /** null **/ - c42161_preMiningLock: InContextSdkMethod, - /** null **/ - c42161_preMiningLocks: InContextSdkMethod, - /** Access to subgraph metadata **/ - c42161__meta: InContextSdkMethod + /** null **/ + c42161_ltoken: InContextSdkMethod< + Subscription["c42161_ltoken"], + Subscriptionc42161_ltokenArgs, + MeshContext + >; + /** null **/ + c42161_ltokens: InContextSdkMethod< + Subscription["c42161_ltokens"], + Subscriptionc42161_ltokensArgs, + MeshContext + >; + /** null **/ + c42161_tvlchange: InContextSdkMethod< + Subscription["c42161_tvlchange"], + Subscriptionc42161_tvlchangeArgs, + MeshContext + >; + /** null **/ + c42161_tvlchanges: InContextSdkMethod< + Subscription["c42161_tvlchanges"], + Subscriptionc42161_tvlchangesArgs, + MeshContext + >; + /** null **/ + c42161_aprchange: InContextSdkMethod< + Subscription["c42161_aprchange"], + Subscriptionc42161_aprchangeArgs, + MeshContext + >; + /** null **/ + c42161_aprchanges: InContextSdkMethod< + Subscription["c42161_aprchanges"], + Subscriptionc42161_aprchangesArgs, + MeshContext + >; + /** null **/ + c42161_activity: InContextSdkMethod< + Subscription["c42161_activity"], + Subscriptionc42161_activityArgs, + MeshContext + >; + /** null **/ + c42161_activities: InContextSdkMethod< + Subscription["c42161_activities"], + Subscriptionc42161_activitiesArgs, + MeshContext + >; + /** null **/ + c42161_rewardsMint: InContextSdkMethod< + Subscription["c42161_rewardsMint"], + Subscriptionc42161_rewardsMintArgs, + MeshContext + >; + /** null **/ + c42161_rewardsMints: InContextSdkMethod< + Subscription["c42161_rewardsMints"], + Subscriptionc42161_rewardsMintsArgs, + MeshContext + >; + /** null **/ + c42161_preMiningLock: InContextSdkMethod< + Subscription["c42161_preMiningLock"], + Subscriptionc42161_preMiningLockArgs, + MeshContext + >; + /** null **/ + c42161_preMiningLocks: InContextSdkMethod< + Subscription["c42161_preMiningLocks"], + Subscriptionc42161_preMiningLocksArgs, + MeshContext + >; + /** Access to subgraph metadata **/ + c42161__meta: InContextSdkMethod< + Subscription["c42161__meta"], + Subscriptionc42161__metaArgs, + MeshContext + >; }; export type Context = { - ["arbitrum"]: { Query: QuerySdk, Mutation: MutationSdk, Subscription: SubscriptionSdk }, - + ["arbitrum"]: { + Query: QuerySdk; + Mutation: MutationSdk; + Subscription: SubscriptionSdk; }; + }; } diff --git a/.graphclient/sources/linea/introspectionSchema.ts b/.graphclient/sources/linea/introspectionSchema.ts index 59bdcedd..922da782 100644 --- a/.graphclient/sources/linea/introspectionSchema.ts +++ b/.graphclient/sources/linea/introspectionSchema.ts @@ -1,10026 +1,10081 @@ // @ts-nocheck -import { buildASTSchema } from 'graphql'; +import { buildASTSchema } from "graphql"; const schemaAST = { - "kind": "Document", - "definitions": [ + kind: "Document", + definitions: [ { - "kind": "SchemaDefinition", - "operationTypes": [ - { - "kind": "OperationTypeDefinition", - "operation": "query", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Query" - } - } - }, - { - "kind": "OperationTypeDefinition", - "operation": "subscription", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Subscription" - } - } - } + kind: "SchemaDefinition", + operationTypes: [ + { + kind: "OperationTypeDefinition", + operation: "query", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Query", + }, + }, + }, + { + kind: "OperationTypeDefinition", + operation: "subscription", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Subscription", + }, + }, + }, ], - "directives": [] + directives: [], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive." + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: + "Marks the GraphQL type as indexable entity. Each type that should be an entity is required to be annotated with this directive.", }, - "name": { - "kind": "Name", - "value": "entity" + name: { + kind: "Name", + value: "entity", }, - "arguments": [], - "repeatable": false, - "locations": [ - { - "kind": "Name", - "value": "OBJECT" - } - ] + arguments: [], + repeatable: false, + locations: [ + { + kind: "Name", + value: "OBJECT", + }, + ], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "Defined a Subgraph ID for an object type" + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: "Defined a Subgraph ID for an object type", }, - "name": { - "kind": "Name", - "value": "subgraphId" + name: { + kind: "Name", + value: "subgraphId", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - } + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, ], - "repeatable": false, - "locations": [ + repeatable: false, + locations: [ { - "kind": "Name", - "value": "OBJECT" - } - ] + kind: "Name", + value: "OBJECT", + }, + ], }, { - "kind": "DirectiveDefinition", - "description": { - "kind": "StringValue", - "value": "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API." + kind: "DirectiveDefinition", + description: { + kind: "StringValue", + value: + "creates a virtual field on the entity that may be queried but cannot be set manually through the mappings API.", }, - "name": { - "kind": "Name", - "value": "derivedFrom" + name: { + kind: "Name", + value: "derivedFrom", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "field" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - } + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "field", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, ], - "repeatable": false, - "locations": [ + repeatable: false, + locations: [ { - "kind": "Name", - "value": "FIELD_DEFINITION" - } - ] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "apr" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } + kind: "Name", + value: "FIELD_DEFINITION", + }, ], - "interfaces": [], - "directives": [] }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange_filter" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "APRChange", }, - "fields": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "FieldDefinition", + name: { + kind: "Name", + value: "apr", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "APRChange_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "apr_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "apr" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "requestId" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "action" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "status" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "ActivityAction" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Deposit" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Withdraw" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "ActivityStatus" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Queued" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Cancelled" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Success" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "Fulfilled" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity_filter" - }, - "fields": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "requestId_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "apr_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + values: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_contains" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "action_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityAction" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "apr", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "status_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ActivityStatus" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "Activity_orderBy" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Activity", }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "requestId" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "requestId", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "account" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "action" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "action", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amountAfterFees" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "status" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "status", }, - "directives": [] - } + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + }, + directives: [], + }, ], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "BigDecimal" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "ActivityAction", }, - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "BigInt" - }, - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - }, - "fields": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number_gte" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - } + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Deposit", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Withdraw", + }, + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Block_height" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "ActivityStatus", }, - "fields": [ + values: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "hash" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Queued", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Cancelled", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "number_gte" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Success", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "Fulfilled", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] - }, - { - "kind": "ScalarTypeDefinition", - "name": { - "kind": "Name", - "value": "Bytes" - }, - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken" + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "Activity_filter", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "symbol" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "decimals" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] - } - ], - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken_filter" - }, - "fields": [ + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_contains" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "requestId_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "symbol_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "decimals_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_in" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "activities_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints_" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "symbol" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "decimals" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "totalMintedRewards" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "tvlUpdates" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "aprUpdates" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "description": { - "kind": "StringValue", - "value": "Defines the order direction, either ascending or descending", - "block": true - }, - "name": { - "kind": "Name", - "value": "OrderDirection" - }, - "values": [ - { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "asc" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "desc" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "duration" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - }, - "fields": [ + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "duration_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - }, - "values": [ + directives: [], + }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "duration" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] - } - ], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Query" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltokens" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchanges" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "action_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityAction", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchanges" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activity" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "status_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ActivityStatus", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "requestId", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "account", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "action", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amountAfterFees", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "status", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "BigDecimal", + }, + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "BigInt", + }, + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number_gte", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "Block_height", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "hash", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "number_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ScalarTypeDefinition", + name: { + kind: "Name", + value: "Bytes", + }, + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "LToken", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "symbol", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "decimals", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlUpdates", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprUpdates", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + ], + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "LToken_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "symbol_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "decimals_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "tvlUpdates_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "aprUpdates_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "activities_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "rewardsMints_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "LToken_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "symbol", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "decimals", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "totalMintedRewards", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "tvlUpdates", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "aprUpdates", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "activities", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + description: { + kind: "StringValue", + value: "Defines the order direction, either ascending or descending", + block: true, + }, + name: { + kind: "Name", + value: "OrderDirection", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "asc", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "desc", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "duration", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "duration_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, + }, + name: { + kind: "Name", + value: "_change_block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, + values: [ + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", + }, + directives: [], + }, + { + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "duration", + }, + directives: [], + }, + ], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Query", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltokens", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchanges", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchanges", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activity", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMint", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLock", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLocks", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "0", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + defaultValue: { + kind: "IntValue", + value: "100", + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "Access to subgraph metadata", + block: true, + }, + name: { + kind: "Name", + value: "_meta", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + ], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Meta_", + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint", + }, + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "account", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "balanceBefore", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "revenue", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "growth", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, + ], + interfaces: [], + directives: [], + }, + { + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMint" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLock" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLocks" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "0" - }, - "directives": [] + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "defaultValue": { - "kind": "IntValue", - "value": "100" - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } - }, - "directives": [] + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Access to subgraph metadata", - "block": true - }, - "name": { - "kind": "Name", - "value": "_meta" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - } - ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Meta_" - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint" - }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "revenue" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "growth" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } - ], - "interfaces": [], - "directives": [] - }, - { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - }, - "fields": [ + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_contains", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "account_not_contains", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "balanceBefore_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + }, + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "revenue_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_contains" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "account_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_lt", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_lte", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_in", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "growth_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "revenue_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + name: { + kind: "Name", + value: "_change_block", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "growth_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "RewardsMint_orderBy", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "account" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "account", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "balanceBefore" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "balanceBefore", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "revenue" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "revenue", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "growth" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "growth", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "Subscription" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "Subscription", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltokens" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltokens", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "tvlchanges" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "tvlchanges", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "TVLChange", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchange", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "TVLChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchange" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "aprchanges" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "aprchanges", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "APRChange", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activity", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "APRChange" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activity" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "activities" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "activities", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Activity", + }, + }, }, - "directives": [] - }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMint", + }, + arguments: [ { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Activity" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMint" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "rewardsMints" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "rewardsMints", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "RewardsMint", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLock", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "RewardsMint" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLock" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" - }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } - }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" - }, - "directives": [] - } + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, }, - "directives": [] + directives: [], }, { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "preMiningLocks" + kind: "FieldDefinition", + name: { + kind: "Name", + value: "preMiningLocks", }, - "arguments": [ + arguments: [ { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "skip" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "skip", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "0" + defaultValue: { + kind: "IntValue", + value: "0", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "first" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "first", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, }, - "defaultValue": { - "kind": "IntValue", - "value": "100" + defaultValue: { + kind: "IntValue", + value: "100", }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderBy" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderBy", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_orderBy" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_orderBy", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "orderDirection" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "orderDirection", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "OrderDirection" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "OrderDirection", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "where" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "where", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock_filter", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - }, + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", - "block": true - }, - "name": { - "kind": "Name", - "value": "subgraphError" + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: + "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.", + block: true, + }, + name: { + kind: "Name", + value: "subgraphError", + }, + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", + }, + }, + }, + defaultValue: { + kind: "EnumValue", + value: "deny", + }, + directives: [], + }, + ], + type: { + kind: "NonNullType", + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "PreMiningLock", + }, + }, }, - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" - } - } + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "Access to subgraph metadata", + block: true, + }, + name: { + kind: "Name", + value: "_meta", + }, + arguments: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "block", }, - "defaultValue": { - "kind": "EnumValue", - "value": "deny" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Block_height", + }, }, - "directives": [] - } - ], - "type": { - "kind": "NonNullType", - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "PreMiningLock" - } - } - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Access to subgraph metadata", - "block": true - }, - "name": { - "kind": "Name", - "value": "_meta" - }, - "arguments": [ - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Block_height" - } - }, - "directives": [] - } + directives: [], + }, ], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Meta_" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Meta_", + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "TVLChange", }, - "fields": [ - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "id" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "id", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + name: { + kind: "Name", + value: "amount", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "InputObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange_filter" + kind: "InputObjectTypeDefinition", + name: { + kind: "Name", + value: "TVLChange_filter", }, - "fields": [ + fields: [ + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "id_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "ID", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_contains_nocase", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_contains_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_gte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_lte" + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - }, - "directives": [] + directives: [], }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_in" + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_starts_with_nocase", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "id_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "ID" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_in" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_starts_with_nocase", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - } + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_not_ends_with_nocase", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_contains_nocase" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "ltoken_", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "LToken_filter", + }, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with" + directives: [], + }, + { + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_starts_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lt", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_gte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_lte", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_not_ends_with_nocase" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "timestamp_not_in", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigInt", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken_" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "LToken_filter" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not", }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lt", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lt" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_gte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_gte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_lte", + }, + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_lte" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_in", + }, + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_in" + kind: "InputValueDefinition", + name: { + kind: "Name", + value: "amount_not_in", }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + type: { + kind: "ListType", + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BigDecimal", + }, + }, + }, }, - "directives": [] + directives: [], }, { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigInt" - } - } - } + kind: "InputValueDefinition", + description: { + kind: "StringValue", + value: "Filter for the block changed event.", + block: true, }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } + name: { + kind: "Name", + value: "_change_block", }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lt" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_gte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_lte" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "name": { - "kind": "Name", - "value": "amount_not_in" - }, - "type": { - "kind": "ListType", - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BigDecimal" - } - } - } - }, - "directives": [] - }, - { - "kind": "InputValueDefinition", - "description": { - "kind": "StringValue", - "value": "Filter for the block changed event.", - "block": true - }, - "name": { - "kind": "Name", - "value": "_change_block" - }, - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "BlockChangedFilter" - } - }, - "directives": [] - } + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "BlockChangedFilter", + }, + }, + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "TVLChange_orderBy" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "TVLChange_orderBy", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "id" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "id", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "ltoken" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "ltoken", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "timestamp" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "timestamp", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "name": { - "kind": "Name", - "value": "amount" + kind: "EnumValueDefinition", + name: { + kind: "Name", + value: "amount", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] + directives: [], }, { - "kind": "ObjectTypeDefinition", - "name": { - "kind": "Name", - "value": "_Block_" + kind: "ObjectTypeDefinition", + name: { + kind: "Name", + value: "_Block_", }, - "fields": [ - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The hash of the block", - "block": true - }, - "name": { - "kind": "Name", - "value": "hash" - }, - "arguments": [], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Bytes" - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The block number", - "block": true - }, - "name": { - "kind": "Name", - "value": "number" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Integer representation of the timestamp stored in blocks for the chain", - "block": true - }, - "name": { - "kind": "Name", - "value": "timestamp" - }, - "arguments": [], - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Int" - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The hash of the block", + block: true, + }, + name: { + kind: "Name", + value: "hash", + }, + arguments: [], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Bytes", + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The block number", + block: true, + }, + name: { + kind: "Name", + value: "number", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "Integer representation of the timestamp stored in blocks for the chain", + block: true, + }, + name: { + kind: "Name", + value: "timestamp", + }, + arguments: [], + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Int", + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "ObjectTypeDefinition", - "description": { - "kind": "StringValue", - "value": "The type for the top-level _meta field", - "block": true + kind: "ObjectTypeDefinition", + description: { + kind: "StringValue", + value: "The type for the top-level _meta field", + block: true, }, - "name": { - "kind": "Name", - "value": "_Meta_" + name: { + kind: "Name", + value: "_Meta_", }, - "fields": [ - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", - "block": true - }, - "name": { - "kind": "Name", - "value": "block" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "_Block_" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "The deployment ID", - "block": true - }, - "name": { - "kind": "Name", - "value": "deployment" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "String" - } - } - }, - "directives": [] - }, - { - "kind": "FieldDefinition", - "description": { - "kind": "StringValue", - "value": "If `true`, the subgraph encountered indexing errors at some past block", - "block": true - }, - "name": { - "kind": "Name", - "value": "hasIndexingErrors" - }, - "arguments": [], - "type": { - "kind": "NonNullType", - "type": { - "kind": "NamedType", - "name": { - "kind": "Name", - "value": "Boolean" - } - } - }, - "directives": [] - } + fields: [ + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "Information about a specific subgraph block. The hash of the block\nwill be null if the _meta field has a block constraint that asks for\na block number. It will be filled if the _meta field has no block constraint\nand therefore asks for the latest block\n", + block: true, + }, + name: { + kind: "Name", + value: "block", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "_Block_", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: "The deployment ID", + block: true, + }, + name: { + kind: "Name", + value: "deployment", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "String", + }, + }, + }, + directives: [], + }, + { + kind: "FieldDefinition", + description: { + kind: "StringValue", + value: + "If `true`, the subgraph encountered indexing errors at some past block", + block: true, + }, + name: { + kind: "Name", + value: "hasIndexingErrors", + }, + arguments: [], + type: { + kind: "NonNullType", + type: { + kind: "NamedType", + name: { + kind: "Name", + value: "Boolean", + }, + }, + }, + directives: [], + }, ], - "interfaces": [], - "directives": [] + interfaces: [], + directives: [], }, { - "kind": "EnumTypeDefinition", - "name": { - "kind": "Name", - "value": "_SubgraphErrorPolicy_" + kind: "EnumTypeDefinition", + name: { + kind: "Name", + value: "_SubgraphErrorPolicy_", }, - "values": [ + values: [ { - "kind": "EnumValueDefinition", - "description": { - "kind": "StringValue", - "value": "Data will be returned even if the subgraph has indexing errors", - "block": true + kind: "EnumValueDefinition", + description: { + kind: "StringValue", + value: + "Data will be returned even if the subgraph has indexing errors", + block: true, }, - "name": { - "kind": "Name", - "value": "allow" + name: { + kind: "Name", + value: "allow", }, - "directives": [] + directives: [], }, { - "kind": "EnumValueDefinition", - "description": { - "kind": "StringValue", - "value": "If the subgraph has indexing errors, data will be omitted. The default.", - "block": true + kind: "EnumValueDefinition", + description: { + kind: "StringValue", + value: + "If the subgraph has indexing errors, data will be omitted. The default.", + block: true, }, - "name": { - "kind": "Name", - "value": "deny" + name: { + kind: "Name", + value: "deny", }, - "directives": [] - } + directives: [], + }, ], - "directives": [] - } - ] + directives: [], + }, + ], }; export default buildASTSchema(schemaAST, { assumeValid: true, - assumeValidSDL: true -}); \ No newline at end of file + assumeValidSDL: true, +}); diff --git a/.graphclient/sources/linea/schema.graphql b/.graphclient/sources/linea/schema.graphql index 529b4505..63f7c628 100644 --- a/.graphclient/sources/linea/schema.graphql +++ b/.graphclient/sources/linea/schema.graphql @@ -65,7 +65,9 @@ input APRChange_filter { apr_lte: BigDecimal apr_in: [BigDecimal!] apr_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -176,7 +178,9 @@ input Activity_filter { status_not: ActivityStatus status_in: [ActivityStatus!] status_not_in: [ActivityStatus!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -213,10 +217,34 @@ type LToken { symbol: String! decimals: Int! totalMintedRewards: BigDecimal! - tvlUpdates(skip: Int = 0, first: Int = 100, orderBy: TVLChange_orderBy, orderDirection: OrderDirection, where: TVLChange_filter): [TVLChange!] - aprUpdates(skip: Int = 0, first: Int = 100, orderBy: APRChange_orderBy, orderDirection: OrderDirection, where: APRChange_filter): [APRChange!] - activities(skip: Int = 0, first: Int = 100, orderBy: Activity_orderBy, orderDirection: OrderDirection, where: Activity_filter): [Activity!] - rewardsMints(skip: Int = 0, first: Int = 100, orderBy: RewardsMint_orderBy, orderDirection: OrderDirection, where: RewardsMint_filter): [RewardsMint!] + tvlUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: TVLChange_orderBy + orderDirection: OrderDirection + where: TVLChange_filter + ): [TVLChange!] + aprUpdates( + skip: Int = 0 + first: Int = 100 + orderBy: APRChange_orderBy + orderDirection: OrderDirection + where: APRChange_filter + ): [APRChange!] + activities( + skip: Int = 0 + first: Int = 100 + orderBy: Activity_orderBy + orderDirection: OrderDirection + where: Activity_filter + ): [Activity!] + rewardsMints( + skip: Int = 0 + first: Int = 100 + orderBy: RewardsMint_orderBy + orderDirection: OrderDirection + where: RewardsMint_filter + ): [RewardsMint!] } input LToken_filter { @@ -268,7 +296,9 @@ input LToken_filter { aprUpdates_: APRChange_filter activities_: Activity_filter rewardsMints_: RewardsMint_filter - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -283,7 +313,9 @@ enum LToken_orderBy { rewardsMints } -"""Defines the order direction, either ascending or descending""" +""" +Defines the order direction, either ascending or descending +""" enum OrderDirection { asc desc @@ -320,7 +352,9 @@ input PreMiningLock_filter { duration_lte: Int duration_in: [Int!] duration_not_in: [Int!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -487,7 +521,9 @@ type Query { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c59144__meta(block: Block_height): _Meta_ } @@ -569,7 +605,9 @@ input RewardsMint_filter { growth_lte: BigDecimal growth_in: [BigDecimal!] growth_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -740,7 +778,9 @@ type Subscription { """ subgraphError: _SubgraphErrorPolicy_! = deny ): [PreMiningLock!]! - """Access to subgraph metadata""" + """ + Access to subgraph metadata + """ c59144__meta(block: Block_height): _Meta_ } @@ -797,7 +837,9 @@ input TVLChange_filter { amount_lte: BigDecimal amount_in: [BigDecimal!] amount_not_in: [BigDecimal!] - """Filter for the block changed event.""" + """ + Filter for the block changed event. + """ _change_block: BlockChangedFilter } @@ -809,35 +851,48 @@ enum TVLChange_orderBy { } type _Block_ { - """The hash of the block""" + """ + The hash of the block + """ hash: Bytes - """The block number""" + """ + The block number + """ number: Int! - """Integer representation of the timestamp stored in blocks for the chain""" + """ + Integer representation of the timestamp stored in blocks for the chain + """ timestamp: Int } -"""The type for the top-level _meta field""" +""" +The type for the top-level _meta field +""" type _Meta_ { """ Information about a specific subgraph block. The hash of the block will be null if the _meta field has a block constraint that asks for a block number. It will be filled if the _meta field has no block constraint and therefore asks for the latest block - """ block: _Block_! - """The deployment ID""" + """ + The deployment ID + """ deployment: String! - """If `true`, the subgraph encountered indexing errors at some past block""" + """ + If `true`, the subgraph encountered indexing errors at some past block + """ hasIndexingErrors: Boolean! } enum _SubgraphErrorPolicy_ { - """Data will be returned even if the subgraph has indexing errors""" + """ + Data will be returned even if the subgraph has indexing errors + """ allow """ If the subgraph has indexing errors, data will be omitted. The default. """ deny -} \ No newline at end of file +} diff --git a/.graphclient/sources/linea/types.ts b/.graphclient/sources/linea/types.ts index 1b3aecdd..3cb584ed 100644 --- a/.graphclient/sources/linea/types.ts +++ b/.graphclient/sources/linea/types.ts @@ -1,876 +1,938 @@ // @ts-nocheck -import { InContextSdkMethod } from '@graphql-mesh/types'; -import { MeshContext } from '@graphql-mesh/runtime'; +import { InContextSdkMethod } from "@graphql-mesh/types"; +import { MeshContext } from "@graphql-mesh/runtime"; export namespace LineaTypes { export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - BigDecimal: any; - BigInt: any; - Bytes: any; -}; - -export type APRChange = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - apr: Scalars['BigDecimal']; -}; - -export type APRChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - apr?: InputMaybe; - apr_not?: InputMaybe; - apr_gt?: InputMaybe; - apr_lt?: InputMaybe; - apr_gte?: InputMaybe; - apr_lte?: InputMaybe; - apr_in?: InputMaybe>; - apr_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type APRChange_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'apr'; - -export type Activity = { - id: Scalars['ID']; - requestId: Scalars['BigInt']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - action: ActivityAction; - amount: Scalars['BigDecimal']; - amountAfterFees: Scalars['BigDecimal']; - status: ActivityStatus; -}; - -export type ActivityAction = - | 'Deposit' - | 'Withdraw'; - -export type ActivityStatus = - | 'Queued' - | 'Cancelled' - | 'Success' - | 'Fulfilled'; - -export type Activity_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - requestId?: InputMaybe; - requestId_not?: InputMaybe; - requestId_gt?: InputMaybe; - requestId_lt?: InputMaybe; - requestId_gte?: InputMaybe; - requestId_lte?: InputMaybe; - requestId_in?: InputMaybe>; - requestId_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - action?: InputMaybe; - action_not?: InputMaybe; - action_in?: InputMaybe>; - action_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - amountAfterFees?: InputMaybe; - amountAfterFees_not?: InputMaybe; - amountAfterFees_gt?: InputMaybe; - amountAfterFees_lt?: InputMaybe; - amountAfterFees_gte?: InputMaybe; - amountAfterFees_lte?: InputMaybe; - amountAfterFees_in?: InputMaybe>; - amountAfterFees_not_in?: InputMaybe>; - status?: InputMaybe; - status_not?: InputMaybe; - status_in?: InputMaybe>; - status_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type Activity_orderBy = - | 'id' - | 'requestId' - | 'ltoken' - | 'timestamp' - | 'account' - | 'action' - | 'amount' - | 'amountAfterFees' - | 'status'; - -export type BlockChangedFilter = { - number_gte: Scalars['Int']; -}; - -export type Block_height = { - hash?: InputMaybe; - number?: InputMaybe; - number_gte?: InputMaybe; -}; - -export type LToken = { - id: Scalars['ID']; - symbol: Scalars['String']; - decimals: Scalars['Int']; - totalMintedRewards: Scalars['BigDecimal']; - tvlUpdates?: Maybe>; - aprUpdates?: Maybe>; - activities?: Maybe>; - rewardsMints?: Maybe>; -}; - - -export type LTokentvlUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenaprUpdatesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenactivitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - - -export type LTokenrewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; -}; - -export type LToken_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - symbol?: InputMaybe; - symbol_not?: InputMaybe; - symbol_gt?: InputMaybe; - symbol_lt?: InputMaybe; - symbol_gte?: InputMaybe; - symbol_lte?: InputMaybe; - symbol_in?: InputMaybe>; - symbol_not_in?: InputMaybe>; - symbol_contains?: InputMaybe; - symbol_contains_nocase?: InputMaybe; - symbol_not_contains?: InputMaybe; - symbol_not_contains_nocase?: InputMaybe; - symbol_starts_with?: InputMaybe; - symbol_starts_with_nocase?: InputMaybe; - symbol_not_starts_with?: InputMaybe; - symbol_not_starts_with_nocase?: InputMaybe; - symbol_ends_with?: InputMaybe; - symbol_ends_with_nocase?: InputMaybe; - symbol_not_ends_with?: InputMaybe; - symbol_not_ends_with_nocase?: InputMaybe; - decimals?: InputMaybe; - decimals_not?: InputMaybe; - decimals_gt?: InputMaybe; - decimals_lt?: InputMaybe; - decimals_gte?: InputMaybe; - decimals_lte?: InputMaybe; - decimals_in?: InputMaybe>; - decimals_not_in?: InputMaybe>; - totalMintedRewards?: InputMaybe; - totalMintedRewards_not?: InputMaybe; - totalMintedRewards_gt?: InputMaybe; - totalMintedRewards_lt?: InputMaybe; - totalMintedRewards_gte?: InputMaybe; - totalMintedRewards_lte?: InputMaybe; - totalMintedRewards_in?: InputMaybe>; - totalMintedRewards_not_in?: InputMaybe>; - tvlUpdates_?: InputMaybe; - aprUpdates_?: InputMaybe; - activities_?: InputMaybe; - rewardsMints_?: InputMaybe; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type LToken_orderBy = - | 'id' - | 'symbol' - | 'decimals' - | 'totalMintedRewards' - | 'tvlUpdates' - | 'aprUpdates' - | 'activities' - | 'rewardsMints'; - -/** Defines the order direction, either ascending or descending */ -export type OrderDirection = - | 'asc' - | 'desc'; - -export type PreMiningLock = { - id: Scalars['ID']; - amount: Scalars['BigDecimal']; - duration: Scalars['Int']; -}; - -export type PreMiningLock_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - duration?: InputMaybe; - duration_not?: InputMaybe; - duration_gt?: InputMaybe; - duration_lt?: InputMaybe; - duration_gte?: InputMaybe; - duration_lte?: InputMaybe; - duration_in?: InputMaybe>; - duration_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type PreMiningLock_orderBy = - | 'id' - | 'amount' - | 'duration'; - -export type Query = { - c59144_ltoken?: Maybe; - c59144_ltokens: Array; - c59144_tvlchange?: Maybe; - c59144_tvlchanges: Array; - c59144_aprchange?: Maybe; - c59144_aprchanges: Array; - c59144_activity?: Maybe; - c59144_activities: Array; - c59144_rewardsMint?: Maybe; - c59144_rewardsMints: Array; - c59144_preMiningLock?: Maybe; - c59144_preMiningLocks: Array; - /** Access to subgraph metadata */ - c59144__meta?: Maybe<_Meta_>; -}; - - -export type Queryc59144_ltokenArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_tvlchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_aprchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_activityArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_rewardsMintArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_preMiningLockArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Queryc59144__metaArgs = { - block?: InputMaybe; -}; - -export type RewardsMint = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - account: Scalars['Bytes']; - balanceBefore: Scalars['BigDecimal']; - revenue: Scalars['BigDecimal']; - growth: Scalars['BigDecimal']; -}; - -export type RewardsMint_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - account?: InputMaybe; - account_not?: InputMaybe; - account_in?: InputMaybe>; - account_not_in?: InputMaybe>; - account_contains?: InputMaybe; - account_not_contains?: InputMaybe; - balanceBefore?: InputMaybe; - balanceBefore_not?: InputMaybe; - balanceBefore_gt?: InputMaybe; - balanceBefore_lt?: InputMaybe; - balanceBefore_gte?: InputMaybe; - balanceBefore_lte?: InputMaybe; - balanceBefore_in?: InputMaybe>; - balanceBefore_not_in?: InputMaybe>; - revenue?: InputMaybe; - revenue_not?: InputMaybe; - revenue_gt?: InputMaybe; - revenue_lt?: InputMaybe; - revenue_gte?: InputMaybe; - revenue_lte?: InputMaybe; - revenue_in?: InputMaybe>; - revenue_not_in?: InputMaybe>; - growth?: InputMaybe; - growth_not?: InputMaybe; - growth_gt?: InputMaybe; - growth_lt?: InputMaybe; - growth_gte?: InputMaybe; - growth_lte?: InputMaybe; - growth_in?: InputMaybe>; - growth_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type RewardsMint_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'account' - | 'balanceBefore' - | 'revenue' - | 'growth'; - -export type Subscription = { - c59144_ltoken?: Maybe; - c59144_ltokens: Array; - c59144_tvlchange?: Maybe; - c59144_tvlchanges: Array; - c59144_aprchange?: Maybe; - c59144_aprchanges: Array; - c59144_activity?: Maybe; - c59144_activities: Array; - c59144_rewardsMint?: Maybe; - c59144_rewardsMints: Array; - c59144_preMiningLock?: Maybe; - c59144_preMiningLocks: Array; - /** Access to subgraph metadata */ - c59144__meta?: Maybe<_Meta_>; -}; - - -export type Subscriptionc59144_ltokenArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_ltokensArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_tvlchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_tvlchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_aprchangeArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_aprchangesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_activityArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_activitiesArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_rewardsMintArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_rewardsMintsArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_preMiningLockArgs = { - id: Scalars['ID']; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144_preMiningLocksArgs = { - skip?: InputMaybe; - first?: InputMaybe; - orderBy?: InputMaybe; - orderDirection?: InputMaybe; - where?: InputMaybe; - block?: InputMaybe; - subgraphError?: _SubgraphErrorPolicy_; -}; - - -export type Subscriptionc59144__metaArgs = { - block?: InputMaybe; -}; - -export type TVLChange = { - id: Scalars['ID']; - ltoken: LToken; - timestamp: Scalars['BigInt']; - amount: Scalars['BigDecimal']; -}; - -export type TVLChange_filter = { - id?: InputMaybe; - id_not?: InputMaybe; - id_gt?: InputMaybe; - id_lt?: InputMaybe; - id_gte?: InputMaybe; - id_lte?: InputMaybe; - id_in?: InputMaybe>; - id_not_in?: InputMaybe>; - ltoken?: InputMaybe; - ltoken_not?: InputMaybe; - ltoken_gt?: InputMaybe; - ltoken_lt?: InputMaybe; - ltoken_gte?: InputMaybe; - ltoken_lte?: InputMaybe; - ltoken_in?: InputMaybe>; - ltoken_not_in?: InputMaybe>; - ltoken_contains?: InputMaybe; - ltoken_contains_nocase?: InputMaybe; - ltoken_not_contains?: InputMaybe; - ltoken_not_contains_nocase?: InputMaybe; - ltoken_starts_with?: InputMaybe; - ltoken_starts_with_nocase?: InputMaybe; - ltoken_not_starts_with?: InputMaybe; - ltoken_not_starts_with_nocase?: InputMaybe; - ltoken_ends_with?: InputMaybe; - ltoken_ends_with_nocase?: InputMaybe; - ltoken_not_ends_with?: InputMaybe; - ltoken_not_ends_with_nocase?: InputMaybe; - ltoken_?: InputMaybe; - timestamp?: InputMaybe; - timestamp_not?: InputMaybe; - timestamp_gt?: InputMaybe; - timestamp_lt?: InputMaybe; - timestamp_gte?: InputMaybe; - timestamp_lte?: InputMaybe; - timestamp_in?: InputMaybe>; - timestamp_not_in?: InputMaybe>; - amount?: InputMaybe; - amount_not?: InputMaybe; - amount_gt?: InputMaybe; - amount_lt?: InputMaybe; - amount_gte?: InputMaybe; - amount_lte?: InputMaybe; - amount_in?: InputMaybe>; - amount_not_in?: InputMaybe>; - /** Filter for the block changed event. */ - _change_block?: InputMaybe; -}; - -export type TVLChange_orderBy = - | 'id' - | 'ltoken' - | 'timestamp' - | 'amount'; - -export type _Block_ = { - /** The hash of the block */ - hash?: Maybe; - /** The block number */ - number: Scalars['Int']; - /** Integer representation of the timestamp stored in blocks for the chain */ - timestamp?: Maybe; -}; - -/** The type for the top-level _meta field */ -export type _Meta_ = { - /** - * Information about a specific subgraph block. The hash of the block - * will be null if the _meta field has a block constraint that asks for - * a block number. It will be filled if the _meta field has no block constraint - * and therefore asks for the latest block - * - */ - block: _Block_; - /** The deployment ID */ - deployment: Scalars['String']; - /** If `true`, the subgraph encountered indexing errors at some past block */ - hasIndexingErrors: Scalars['Boolean']; -}; - -export type _SubgraphErrorPolicy_ = - /** Data will be returned even if the subgraph has indexing errors */ - | 'allow' - /** If the subgraph has indexing errors, data will be omitted. The default. */ - | 'deny'; + export type InputMaybe = Maybe; + export type Exact = { + [K in keyof T]: T[K]; + }; + export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; + }; + export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; + }; + /** All built-in and custom scalars, mapped to their actual values */ + export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: any; + BigInt: any; + Bytes: any; + }; + + export type APRChange = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + apr: Scalars["BigDecimal"]; + }; + + export type APRChange_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + apr?: InputMaybe; + apr_not?: InputMaybe; + apr_gt?: InputMaybe; + apr_lt?: InputMaybe; + apr_gte?: InputMaybe; + apr_lte?: InputMaybe; + apr_in?: InputMaybe>; + apr_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type APRChange_orderBy = "id" | "ltoken" | "timestamp" | "apr"; + + export type Activity = { + id: Scalars["ID"]; + requestId: Scalars["BigInt"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + action: ActivityAction; + amount: Scalars["BigDecimal"]; + amountAfterFees: Scalars["BigDecimal"]; + status: ActivityStatus; + }; + + export type ActivityAction = "Deposit" | "Withdraw"; + + export type ActivityStatus = "Queued" | "Cancelled" | "Success" | "Fulfilled"; + + export type Activity_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + requestId?: InputMaybe; + requestId_not?: InputMaybe; + requestId_gt?: InputMaybe; + requestId_lt?: InputMaybe; + requestId_gte?: InputMaybe; + requestId_lte?: InputMaybe; + requestId_in?: InputMaybe>; + requestId_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + action?: InputMaybe; + action_not?: InputMaybe; + action_in?: InputMaybe>; + action_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + amountAfterFees?: InputMaybe; + amountAfterFees_not?: InputMaybe; + amountAfterFees_gt?: InputMaybe; + amountAfterFees_lt?: InputMaybe; + amountAfterFees_gte?: InputMaybe; + amountAfterFees_lte?: InputMaybe; + amountAfterFees_in?: InputMaybe>; + amountAfterFees_not_in?: InputMaybe>; + status?: InputMaybe; + status_not?: InputMaybe; + status_in?: InputMaybe>; + status_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type Activity_orderBy = + | "id" + | "requestId" + | "ltoken" + | "timestamp" + | "account" + | "action" + | "amount" + | "amountAfterFees" + | "status"; + + export type BlockChangedFilter = { + number_gte: Scalars["Int"]; + }; + + export type Block_height = { + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; + }; + + export type LToken = { + id: Scalars["ID"]; + symbol: Scalars["String"]; + decimals: Scalars["Int"]; + totalMintedRewards: Scalars["BigDecimal"]; + tvlUpdates?: Maybe>; + aprUpdates?: Maybe>; + activities?: Maybe>; + rewardsMints?: Maybe>; + }; + + export type LTokentvlUpdatesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenaprUpdatesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenactivitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LTokenrewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + }; + + export type LToken_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + symbol?: InputMaybe; + symbol_not?: InputMaybe; + symbol_gt?: InputMaybe; + symbol_lt?: InputMaybe; + symbol_gte?: InputMaybe; + symbol_lte?: InputMaybe; + symbol_in?: InputMaybe>; + symbol_not_in?: InputMaybe>; + symbol_contains?: InputMaybe; + symbol_contains_nocase?: InputMaybe; + symbol_not_contains?: InputMaybe; + symbol_not_contains_nocase?: InputMaybe; + symbol_starts_with?: InputMaybe; + symbol_starts_with_nocase?: InputMaybe; + symbol_not_starts_with?: InputMaybe; + symbol_not_starts_with_nocase?: InputMaybe; + symbol_ends_with?: InputMaybe; + symbol_ends_with_nocase?: InputMaybe; + symbol_not_ends_with?: InputMaybe; + symbol_not_ends_with_nocase?: InputMaybe; + decimals?: InputMaybe; + decimals_not?: InputMaybe; + decimals_gt?: InputMaybe; + decimals_lt?: InputMaybe; + decimals_gte?: InputMaybe; + decimals_lte?: InputMaybe; + decimals_in?: InputMaybe>; + decimals_not_in?: InputMaybe>; + totalMintedRewards?: InputMaybe; + totalMintedRewards_not?: InputMaybe; + totalMintedRewards_gt?: InputMaybe; + totalMintedRewards_lt?: InputMaybe; + totalMintedRewards_gte?: InputMaybe; + totalMintedRewards_lte?: InputMaybe; + totalMintedRewards_in?: InputMaybe>; + totalMintedRewards_not_in?: InputMaybe>; + tvlUpdates_?: InputMaybe; + aprUpdates_?: InputMaybe; + activities_?: InputMaybe; + rewardsMints_?: InputMaybe; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type LToken_orderBy = + | "id" + | "symbol" + | "decimals" + | "totalMintedRewards" + | "tvlUpdates" + | "aprUpdates" + | "activities" + | "rewardsMints"; + + /** Defines the order direction, either ascending or descending */ + export type OrderDirection = "asc" | "desc"; + + export type PreMiningLock = { + id: Scalars["ID"]; + amount: Scalars["BigDecimal"]; + duration: Scalars["Int"]; + }; + + export type PreMiningLock_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + duration?: InputMaybe; + duration_not?: InputMaybe; + duration_gt?: InputMaybe; + duration_lt?: InputMaybe; + duration_gte?: InputMaybe; + duration_lte?: InputMaybe; + duration_in?: InputMaybe>; + duration_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type PreMiningLock_orderBy = "id" | "amount" | "duration"; + + export type Query = { + c59144_ltoken?: Maybe; + c59144_ltokens: Array; + c59144_tvlchange?: Maybe; + c59144_tvlchanges: Array; + c59144_aprchange?: Maybe; + c59144_aprchanges: Array; + c59144_activity?: Maybe; + c59144_activities: Array; + c59144_rewardsMint?: Maybe; + c59144_rewardsMints: Array; + c59144_preMiningLock?: Maybe; + c59144_preMiningLocks: Array; + /** Access to subgraph metadata */ + c59144__meta?: Maybe<_Meta_>; + }; + + export type Queryc59144_ltokenArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_ltokensArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_tvlchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_tvlchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_aprchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_aprchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_activityArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_activitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_rewardsMintArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_rewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_preMiningLockArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144_preMiningLocksArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Queryc59144__metaArgs = { + block?: InputMaybe; + }; + + export type RewardsMint = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + account: Scalars["Bytes"]; + balanceBefore: Scalars["BigDecimal"]; + revenue: Scalars["BigDecimal"]; + growth: Scalars["BigDecimal"]; + }; + + export type RewardsMint_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + account?: InputMaybe; + account_not?: InputMaybe; + account_in?: InputMaybe>; + account_not_in?: InputMaybe>; + account_contains?: InputMaybe; + account_not_contains?: InputMaybe; + balanceBefore?: InputMaybe; + balanceBefore_not?: InputMaybe; + balanceBefore_gt?: InputMaybe; + balanceBefore_lt?: InputMaybe; + balanceBefore_gte?: InputMaybe; + balanceBefore_lte?: InputMaybe; + balanceBefore_in?: InputMaybe>; + balanceBefore_not_in?: InputMaybe>; + revenue?: InputMaybe; + revenue_not?: InputMaybe; + revenue_gt?: InputMaybe; + revenue_lt?: InputMaybe; + revenue_gte?: InputMaybe; + revenue_lte?: InputMaybe; + revenue_in?: InputMaybe>; + revenue_not_in?: InputMaybe>; + growth?: InputMaybe; + growth_not?: InputMaybe; + growth_gt?: InputMaybe; + growth_lt?: InputMaybe; + growth_gte?: InputMaybe; + growth_lte?: InputMaybe; + growth_in?: InputMaybe>; + growth_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type RewardsMint_orderBy = + | "id" + | "ltoken" + | "timestamp" + | "account" + | "balanceBefore" + | "revenue" + | "growth"; + + export type Subscription = { + c59144_ltoken?: Maybe; + c59144_ltokens: Array; + c59144_tvlchange?: Maybe; + c59144_tvlchanges: Array; + c59144_aprchange?: Maybe; + c59144_aprchanges: Array; + c59144_activity?: Maybe; + c59144_activities: Array; + c59144_rewardsMint?: Maybe; + c59144_rewardsMints: Array; + c59144_preMiningLock?: Maybe; + c59144_preMiningLocks: Array; + /** Access to subgraph metadata */ + c59144__meta?: Maybe<_Meta_>; + }; + + export type Subscriptionc59144_ltokenArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_ltokensArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_tvlchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_tvlchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_aprchangeArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_aprchangesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_activityArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_activitiesArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_rewardsMintArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_rewardsMintsArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_preMiningLockArgs = { + id: Scalars["ID"]; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144_preMiningLocksArgs = { + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; + subgraphError?: _SubgraphErrorPolicy_; + }; + + export type Subscriptionc59144__metaArgs = { + block?: InputMaybe; + }; + + export type TVLChange = { + id: Scalars["ID"]; + ltoken: LToken; + timestamp: Scalars["BigInt"]; + amount: Scalars["BigDecimal"]; + }; + + export type TVLChange_filter = { + id?: InputMaybe; + id_not?: InputMaybe; + id_gt?: InputMaybe; + id_lt?: InputMaybe; + id_gte?: InputMaybe; + id_lte?: InputMaybe; + id_in?: InputMaybe>; + id_not_in?: InputMaybe>; + ltoken?: InputMaybe; + ltoken_not?: InputMaybe; + ltoken_gt?: InputMaybe; + ltoken_lt?: InputMaybe; + ltoken_gte?: InputMaybe; + ltoken_lte?: InputMaybe; + ltoken_in?: InputMaybe>; + ltoken_not_in?: InputMaybe>; + ltoken_contains?: InputMaybe; + ltoken_contains_nocase?: InputMaybe; + ltoken_not_contains?: InputMaybe; + ltoken_not_contains_nocase?: InputMaybe; + ltoken_starts_with?: InputMaybe; + ltoken_starts_with_nocase?: InputMaybe; + ltoken_not_starts_with?: InputMaybe; + ltoken_not_starts_with_nocase?: InputMaybe; + ltoken_ends_with?: InputMaybe; + ltoken_ends_with_nocase?: InputMaybe; + ltoken_not_ends_with?: InputMaybe; + ltoken_not_ends_with_nocase?: InputMaybe; + ltoken_?: InputMaybe; + timestamp?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_lt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_not_in?: InputMaybe>; + amount?: InputMaybe; + amount_not?: InputMaybe; + amount_gt?: InputMaybe; + amount_lt?: InputMaybe; + amount_gte?: InputMaybe; + amount_lte?: InputMaybe; + amount_in?: InputMaybe>; + amount_not_in?: InputMaybe>; + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + }; + + export type TVLChange_orderBy = "id" | "ltoken" | "timestamp" | "amount"; + + export type _Block_ = { + /** The hash of the block */ + hash?: Maybe; + /** The block number */ + number: Scalars["Int"]; + /** Integer representation of the timestamp stored in blocks for the chain */ + timestamp?: Maybe; + }; + + /** The type for the top-level _meta field */ + export type _Meta_ = { + /** + * Information about a specific subgraph block. The hash of the block + * will be null if the _meta field has a block constraint that asks for + * a block number. It will be filled if the _meta field has no block constraint + * and therefore asks for the latest block + * + */ + block: _Block_; + /** The deployment ID */ + deployment: Scalars["String"]; + /** If `true`, the subgraph encountered indexing errors at some past block */ + hasIndexingErrors: Scalars["Boolean"]; + }; + + export type _SubgraphErrorPolicy_ = + /** Data will be returned even if the subgraph has indexing errors */ + | "allow" + /** If the subgraph has indexing errors, data will be omitted. The default. */ + | "deny"; export type QuerySdk = { - /** null **/ - c59144_ltoken: InContextSdkMethod, - /** null **/ - c59144_ltokens: InContextSdkMethod, - /** null **/ - c59144_tvlchange: InContextSdkMethod, - /** null **/ - c59144_tvlchanges: InContextSdkMethod, - /** null **/ - c59144_aprchange: InContextSdkMethod, - /** null **/ - c59144_aprchanges: InContextSdkMethod, - /** null **/ - c59144_activity: InContextSdkMethod, - /** null **/ - c59144_activities: InContextSdkMethod, - /** null **/ - c59144_rewardsMint: InContextSdkMethod, - /** null **/ - c59144_rewardsMints: InContextSdkMethod, - /** null **/ - c59144_preMiningLock: InContextSdkMethod, - /** null **/ - c59144_preMiningLocks: InContextSdkMethod, - /** Access to subgraph metadata **/ - c59144__meta: InContextSdkMethod - }; - - export type MutationSdk = { - + /** null **/ + c59144_ltoken: InContextSdkMethod< + Query["c59144_ltoken"], + Queryc59144_ltokenArgs, + MeshContext + >; + /** null **/ + c59144_ltokens: InContextSdkMethod< + Query["c59144_ltokens"], + Queryc59144_ltokensArgs, + MeshContext + >; + /** null **/ + c59144_tvlchange: InContextSdkMethod< + Query["c59144_tvlchange"], + Queryc59144_tvlchangeArgs, + MeshContext + >; + /** null **/ + c59144_tvlchanges: InContextSdkMethod< + Query["c59144_tvlchanges"], + Queryc59144_tvlchangesArgs, + MeshContext + >; + /** null **/ + c59144_aprchange: InContextSdkMethod< + Query["c59144_aprchange"], + Queryc59144_aprchangeArgs, + MeshContext + >; + /** null **/ + c59144_aprchanges: InContextSdkMethod< + Query["c59144_aprchanges"], + Queryc59144_aprchangesArgs, + MeshContext + >; + /** null **/ + c59144_activity: InContextSdkMethod< + Query["c59144_activity"], + Queryc59144_activityArgs, + MeshContext + >; + /** null **/ + c59144_activities: InContextSdkMethod< + Query["c59144_activities"], + Queryc59144_activitiesArgs, + MeshContext + >; + /** null **/ + c59144_rewardsMint: InContextSdkMethod< + Query["c59144_rewardsMint"], + Queryc59144_rewardsMintArgs, + MeshContext + >; + /** null **/ + c59144_rewardsMints: InContextSdkMethod< + Query["c59144_rewardsMints"], + Queryc59144_rewardsMintsArgs, + MeshContext + >; + /** null **/ + c59144_preMiningLock: InContextSdkMethod< + Query["c59144_preMiningLock"], + Queryc59144_preMiningLockArgs, + MeshContext + >; + /** null **/ + c59144_preMiningLocks: InContextSdkMethod< + Query["c59144_preMiningLocks"], + Queryc59144_preMiningLocksArgs, + MeshContext + >; + /** Access to subgraph metadata **/ + c59144__meta: InContextSdkMethod< + Query["c59144__meta"], + Queryc59144__metaArgs, + MeshContext + >; }; + export type MutationSdk = {}; + export type SubscriptionSdk = { - /** null **/ - c59144_ltoken: InContextSdkMethod, - /** null **/ - c59144_ltokens: InContextSdkMethod, - /** null **/ - c59144_tvlchange: InContextSdkMethod, - /** null **/ - c59144_tvlchanges: InContextSdkMethod, - /** null **/ - c59144_aprchange: InContextSdkMethod, - /** null **/ - c59144_aprchanges: InContextSdkMethod, - /** null **/ - c59144_activity: InContextSdkMethod, - /** null **/ - c59144_activities: InContextSdkMethod, - /** null **/ - c59144_rewardsMint: InContextSdkMethod, - /** null **/ - c59144_rewardsMints: InContextSdkMethod, - /** null **/ - c59144_preMiningLock: InContextSdkMethod, - /** null **/ - c59144_preMiningLocks: InContextSdkMethod, - /** Access to subgraph metadata **/ - c59144__meta: InContextSdkMethod + /** null **/ + c59144_ltoken: InContextSdkMethod< + Subscription["c59144_ltoken"], + Subscriptionc59144_ltokenArgs, + MeshContext + >; + /** null **/ + c59144_ltokens: InContextSdkMethod< + Subscription["c59144_ltokens"], + Subscriptionc59144_ltokensArgs, + MeshContext + >; + /** null **/ + c59144_tvlchange: InContextSdkMethod< + Subscription["c59144_tvlchange"], + Subscriptionc59144_tvlchangeArgs, + MeshContext + >; + /** null **/ + c59144_tvlchanges: InContextSdkMethod< + Subscription["c59144_tvlchanges"], + Subscriptionc59144_tvlchangesArgs, + MeshContext + >; + /** null **/ + c59144_aprchange: InContextSdkMethod< + Subscription["c59144_aprchange"], + Subscriptionc59144_aprchangeArgs, + MeshContext + >; + /** null **/ + c59144_aprchanges: InContextSdkMethod< + Subscription["c59144_aprchanges"], + Subscriptionc59144_aprchangesArgs, + MeshContext + >; + /** null **/ + c59144_activity: InContextSdkMethod< + Subscription["c59144_activity"], + Subscriptionc59144_activityArgs, + MeshContext + >; + /** null **/ + c59144_activities: InContextSdkMethod< + Subscription["c59144_activities"], + Subscriptionc59144_activitiesArgs, + MeshContext + >; + /** null **/ + c59144_rewardsMint: InContextSdkMethod< + Subscription["c59144_rewardsMint"], + Subscriptionc59144_rewardsMintArgs, + MeshContext + >; + /** null **/ + c59144_rewardsMints: InContextSdkMethod< + Subscription["c59144_rewardsMints"], + Subscriptionc59144_rewardsMintsArgs, + MeshContext + >; + /** null **/ + c59144_preMiningLock: InContextSdkMethod< + Subscription["c59144_preMiningLock"], + Subscriptionc59144_preMiningLockArgs, + MeshContext + >; + /** null **/ + c59144_preMiningLocks: InContextSdkMethod< + Subscription["c59144_preMiningLocks"], + Subscriptionc59144_preMiningLocksArgs, + MeshContext + >; + /** Access to subgraph metadata **/ + c59144__meta: InContextSdkMethod< + Subscription["c59144__meta"], + Subscriptionc59144__metaArgs, + MeshContext + >; }; export type Context = { - ["linea"]: { Query: QuerySdk, Mutation: MutationSdk, Subscription: SubscriptionSdk }, - + ["linea"]: { + Query: QuerySdk; + Mutation: MutationSdk; + Subscription: SubscriptionSdk; }; + }; } diff --git a/.prettierrc.json b/.prettierrc.json index 07f43fc6..53c49dc8 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -21,4 +21,4 @@ } } ] -} \ No newline at end of file +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 67e18523..2d177f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,963 +1,826 @@ ## [1.268.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.267.0...v1.268.0) (2024-06-08) - ### Features -* deploy staking on arbi mainnet ([5e99001](https://github.com/LedgityLabs/LedgityYield/commit/5e99001dc55304aa8996139920ba28e1814334a3)) +- deploy staking on arbi mainnet ([5e99001](https://github.com/LedgityLabs/LedgityYield/commit/5e99001dc55304aa8996139920ba28e1814334a3)) ## [1.267.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.266.0...v1.267.0) (2024-06-06) - ### Features -* add coingecko logo image ([baf0f78](https://github.com/LedgityLabs/LedgityYield/commit/baf0f782dacbd5143f6a89d488ec0bdc2ac24913)) +- add coingecko logo image ([baf0f78](https://github.com/LedgityLabs/LedgityYield/commit/baf0f782dacbd5143f6a89d488ec0bdc2ac24913)) ## [1.266.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.265.3...v1.266.0) (2024-06-04) - ### Features -* add dextools logo ([7ab7474](https://github.com/LedgityLabs/LedgityYield/commit/7ab74747a31650e7995d3802eac706eafd12d677)) +- add dextools logo ([7ab7474](https://github.com/LedgityLabs/LedgityYield/commit/7ab74747a31650e7995d3802eac706eafd12d677)) ## [1.265.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.265.2...v1.265.3) (2024-06-04) - ### Fixes -* use static ldy token address instead of fetching wagmi generated file ([49633e0](https://github.com/LedgityLabs/LedgityYield/commit/49633e06f7eb938f7445ff5e5202594c73f130ea)) +- use static ldy token address instead of fetching wagmi generated file ([49633e0](https://github.com/LedgityLabs/LedgityYield/commit/49633e06f7eb938f7445ff5e5202594c73f130ea)) ## [1.265.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.265.1...v1.265.2) (2024-06-04) - ### Fixes -* **dependencies.json:** add LDY token address for mainnet on dependencies json file ([5b6641b](https://github.com/LedgityLabs/LedgityYield/commit/5b6641bbdc500e9a34787c28898f74b95097c2ce)) +- **dependencies.json:** add LDY token address for mainnet on dependencies json file ([5b6641b](https://github.com/LedgityLabs/LedgityYield/commit/5b6641bbdc500e9a34787c28898f74b95097c2ce)) ## [1.265.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.265.0...v1.265.1) (2024-06-04) - ### Fixes -* compile mainnet contract for wagmi generated file ([bc248ab](https://github.com/LedgityLabs/LedgityYield/commit/bc248ab6fbc86ed284b2d98f6a2d132348a125ef)) +- compile mainnet contract for wagmi generated file ([bc248ab](https://github.com/LedgityLabs/LedgityYield/commit/bc248ab6fbc86ed284b2d98f6a2d132348a125ef)) ## [1.265.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.264.0...v1.265.0) (2024-06-03) - ### Features -* visible staking tab on ui ([56cbde0](https://github.com/LedgityLabs/LedgityYield/commit/56cbde0c3fc1b2783d3cd81d9d90af565a9a6c5e)) +- visible staking tab on ui ([56cbde0](https://github.com/LedgityLabs/LedgityYield/commit/56cbde0c3fc1b2783d3cd81d9d90af565a9a6c5e)) ## [1.264.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.263.0...v1.264.0) (2024-06-03) - ### Features -* add listing buttons, partners logos ([04cb876](https://github.com/LedgityLabs/LedgityYield/commit/04cb8762226c92d2283ace38bd218e4ee3df3b80)) +- add listing buttons, partners logos ([04cb876](https://github.com/LedgityLabs/LedgityYield/commit/04cb8762226c92d2283ace38bd218e4ee3df3b80)) ## [1.263.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.262.0...v1.263.0) (2024-06-03) - ### Features -* deploy staking on eth mainnet ([75bc802](https://github.com/LedgityLabs/LedgityYield/commit/75bc802317405482878f14ed4c12b6f29bd60bcf)) +- deploy staking on eth mainnet ([75bc802](https://github.com/LedgityLabs/LedgityYield/commit/75bc802317405482878f14ed4c12b6f29bd60bcf)) ## [1.262.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.261.1...v1.262.0) (2024-05-30) - ### Features -* support okx layer mainnet ([3dd31c5](https://github.com/LedgityLabs/LedgityYield/commit/3dd31c5163b620d906263b367c494b68a16f5efc)) +- support okx layer mainnet ([3dd31c5](https://github.com/LedgityLabs/LedgityYield/commit/3dd31c5163b620d906263b367c494b68a16f5efc)) ## [1.261.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.261.0...v1.261.1) (2024-05-29) - ### Fixes -* multipler contant values in the frontend ([00e04e1](https://github.com/LedgityLabs/LedgityYield/commit/00e04e1fda8c9bd53501c39520159e7e0aa050f6)) +- multipler contant values in the frontend ([00e04e1](https://github.com/LedgityLabs/LedgityYield/commit/00e04e1fda8c9bd53501c39520159e7e0aa050f6)) ## [1.261.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.260.0...v1.261.0) (2024-05-29) - ### Features -* remove stakeDurationInfo associated ownable functions ([0ce932f](https://github.com/LedgityLabs/LedgityYield/commit/0ce932fa1d7a7ff411e924c6b081db3df86f3042)) +- remove stakeDurationInfo associated ownable functions ([0ce932f](https://github.com/LedgityLabs/LedgityYield/commit/0ce932fa1d7a7ff411e924c6b081db3df86f3042)) ## [1.260.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.6...v1.260.0) (2024-05-29) - ### Features -* add totalrewards variable and other ownable functions on staking contract ([396ce1f](https://github.com/LedgityLabs/LedgityYield/commit/396ce1f54f57e913ddc1b2c50981b86a11d72aed)) +- add totalrewards variable and other ownable functions on staking contract ([396ce1f](https://github.com/LedgityLabs/LedgityYield/commit/396ce1f54f57e913ddc1b2c50981b86a11d72aed)) ## [1.259.6](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.5...v1.259.6) (2024-05-28) - ### Fixes -* change APY to APR in frontend UI ([eddd4b3](https://github.com/LedgityLabs/LedgityYield/commit/eddd4b393926e6a234a393cda4efd44cc890968d)) +- change APY to APR in frontend UI ([eddd4b3](https://github.com/LedgityLabs/LedgityYield/commit/eddd4b393926e6a234a393cda4efd44cc890968d)) ## [1.259.5](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.4...v1.259.5) (2024-05-26) - ### Fixes -* **allowancetxbutton:** switching button issue between allow and execute ([9d38a50](https://github.com/LedgityLabs/LedgityYield/commit/9d38a5072ee725dffc0d9ed5462dc92638b19903)) +- **allowancetxbutton:** switching button issue between allow and execute ([9d38a50](https://github.com/LedgityLabs/LedgityYield/commit/9d38a5072ee725dffc0d9ed5462dc92638b19903)) ## [1.259.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.3...v1.259.4) (2024-05-26) - ### Fixes -* aPY calculation ([f76d512](https://github.com/LedgityLabs/LedgityYield/commit/f76d51239f828018e02f87192f45dbd97876a4c2)) +- aPY calculation ([f76d512](https://github.com/LedgityLabs/LedgityYield/commit/f76d51239f828018e02f87192f45dbd97876a4c2)) ## [1.259.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.2...v1.259.3) (2024-05-26) - ### Fixes -* aPY calculation ([46de883](https://github.com/LedgityLabs/LedgityYield/commit/46de8839accc49feb52538120f7148c7a76d4465)) +- aPY calculation ([46de883](https://github.com/LedgityLabs/LedgityYield/commit/46de8839accc49feb52538120f7148c7a76d4465)) ## [1.259.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.1...v1.259.2) (2024-05-26) - ### Fixes -* time left issue on staking UI ([7ab4210](https://github.com/LedgityLabs/LedgityYield/commit/7ab4210db4a1646d7f2c0a970321f42c25fe9d66)) +- time left issue on staking UI ([7ab4210](https://github.com/LedgityLabs/LedgityYield/commit/7ab4210db4a1646d7f2c0a970321f42c25fe9d66)) ## [1.259.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.259.0...v1.259.1) (2024-05-24) - ### Fixes -* remove okx mainnet from UI ([99d2e30](https://github.com/LedgityLabs/LedgityYield/commit/99d2e3086d27b20483a171db222eaaeed95eea16)) +- remove okx mainnet from UI ([99d2e30](https://github.com/LedgityLabs/LedgityYield/commit/99d2e3086d27b20483a171db222eaaeed95eea16)) ## [1.259.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.258.1...v1.259.0) (2024-05-24) - ### Features -* add more functions callable by owner in the staking contract ([8e78fde](https://github.com/LedgityLabs/LedgityYield/commit/8e78fdef99ec0a355f188dc0191c9113496ef28e)) +- add more functions callable by owner in the staking contract ([8e78fde](https://github.com/LedgityLabs/LedgityYield/commit/8e78fdef99ec0a355f188dc0191c9113496ef28e)) ## [1.258.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.258.0...v1.258.1) (2024-05-22) - ### Fixes -* broken pre-mining page since last PR ([ec67f62](https://github.com/LedgityLabs/LedgityYield/commit/ec67f623b05495dfe0f6b6e28ef0a4fc1b371b09)) +- broken pre-mining page since last PR ([ec67f62](https://github.com/LedgityLabs/LedgityYield/commit/ec67f623b05495dfe0f6b6e28ef0a4fc1b371b09)) ## [1.258.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.257.0...v1.258.0) (2024-05-17) - ### Features -* correct APY ([6013f28](https://github.com/LedgityLabs/LedgityYield/commit/6013f28582cdeea3ac3e85f98ce1a0e5d10cb0f6)) +- correct APY ([6013f28](https://github.com/LedgityLabs/LedgityYield/commit/6013f28582cdeea3ac3e85f98ce1a0e5d10cb0f6)) ## [1.257.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.256.3...v1.257.0) (2024-05-17) - ### Features -* **ldystaking:** implement weight mechanism ([4dbfd21](https://github.com/LedgityLabs/LedgityYield/commit/4dbfd210e00ba677e101d471ad083d01e443010b)) +- **ldystaking:** implement weight mechanism ([4dbfd21](https://github.com/LedgityLabs/LedgityYield/commit/4dbfd210e00ba677e101d471ad083d01e443010b)) ## [1.256.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.256.2...v1.256.3) (2024-05-13) - ### Fixes -* round earned amount as 4 decimals ([f3236ab](https://github.com/LedgityLabs/LedgityYield/commit/f3236ab97dd27591442645f3ee92a14484805bd3)) +- round earned amount as 4 decimals ([f3236ab](https://github.com/LedgityLabs/LedgityYield/commit/f3236ab97dd27591442645f3ee92a14484805bd3)) ## [1.256.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.256.1...v1.256.2) (2024-05-13) - ### Fixes -* apy calculation ([dd7252b](https://github.com/LedgityLabs/LedgityYield/commit/dd7252bbc94f1869ad435e19f39509c521925b85)) +- apy calculation ([dd7252b](https://github.com/LedgityLabs/LedgityYield/commit/dd7252bbc94f1869ad435e19f39509c521925b85)) ## [1.256.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.256.0...v1.256.1) (2024-05-08) - ### Fixes -* **wagmi generate:** regenerate wagmi file ([4eea9f2](https://github.com/LedgityLabs/LedgityYield/commit/4eea9f2986ede66274caa025faba98cd711ce152)) +- **wagmi generate:** regenerate wagmi file ([4eea9f2](https://github.com/LedgityLabs/LedgityYield/commit/4eea9f2986ede66274caa025faba98cd711ce152)) ## [1.256.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.255.0...v1.256.0) (2024-05-07) - ### Features -* **base-sepolia_subgraph.yaml:** modify subgraph file ([318c504](https://github.com/LedgityLabs/LedgityYield/commit/318c5047216c0432338d561cd4376d156839e18f)) - +- **base-sepolia_subgraph.yaml:** modify subgraph file ([318c504](https://github.com/LedgityLabs/LedgityYield/commit/318c5047216c0432338d561cd4376d156839e18f)) ### Others -* **base-sepolia_subgraph.yaml:** modify subgraph file ([4b5a4d1](https://github.com/LedgityLabs/LedgityYield/commit/4b5a4d18b498e58e976c08bd6c02c7fda822119f)) +- **base-sepolia_subgraph.yaml:** modify subgraph file ([4b5a4d1](https://github.com/LedgityLabs/LedgityYield/commit/4b5a4d18b498e58e976c08bd6c02c7fda822119f)) ## [1.255.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.254.2...v1.255.0) (2024-05-06) - ### Features -* add staking ui ([45add7f](https://github.com/LedgityLabs/LedgityYield/commit/45add7f5fb69b7826827e6b7084dc1a1e30ab8c3)) - +- add staking ui ([45add7f](https://github.com/LedgityLabs/LedgityYield/commit/45add7f5fb69b7826827e6b7084dc1a1e30ab8c3)) ### Fixes -* issues on staking ui ([f9b6d05](https://github.com/LedgityLabs/LedgityYield/commit/f9b6d05912cb421b751025b963e5f784fc2145f1)) +- issues on staking ui ([f9b6d05](https://github.com/LedgityLabs/LedgityYield/commit/f9b6d05912cb421b751025b963e5f784fc2145f1)) ## [1.254.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.254.1...v1.254.2) (2024-05-03) - ### Fixes -* center airdropped tokens ([d86ed36](https://github.com/LedgityLabs/LedgityYield/commit/d86ed366fa57476760996d6387e3a8690c408a10)) +- center airdropped tokens ([d86ed36](https://github.com/LedgityLabs/LedgityYield/commit/d86ed366fa57476760996d6387e3a8690c408a10)) ## [1.254.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.254.0...v1.254.1) (2024-05-03) - ### Fixes -* hide discarded multi-drop participation ([efc4273](https://github.com/LedgityLabs/LedgityYield/commit/efc427362084e9225b5d1a7e67bf5bf14229eed8)) +- hide discarded multi-drop participation ([efc4273](https://github.com/LedgityLabs/LedgityYield/commit/efc427362084e9225b5d1a7e67bf5bf14229eed8)) ## [1.254.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.253.4...v1.254.0) (2024-04-30) - ### Features -* staking contract ([7418642](https://github.com/LedgityLabs/LedgityYield/commit/7418642d330ec9cdda5619b6880d45e0999119d1)) - +- staking contract ([7418642](https://github.com/LedgityLabs/LedgityYield/commit/7418642d330ec9cdda5619b6880d45e0999119d1)) ### Fixes -* modify contracts ([f826640](https://github.com/LedgityLabs/LedgityYield/commit/f826640d5eca862798cb82cbca57cb55404ca7c3)) +- modify contracts ([f826640](https://github.com/LedgityLabs/LedgityYield/commit/f826640d5eca862798cb82cbca57cb55404ca7c3)) ## [1.253.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.253.3...v1.253.4) (2024-04-10) - ### Fixes -* improve alerts' contextual informations ([feca925](https://github.com/LedgityLabs/LedgityYield/commit/feca9257fd7ca560248e28e03d278d808222e117)) +- improve alerts' contextual informations ([feca925](https://github.com/LedgityLabs/LedgityYield/commit/feca9257fd7ca560248e28e03d278d808222e117)) ## [1.253.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.253.2...v1.253.3) (2024-04-10) - ### Fixes -* improve activity monitoring alert messages ([b914b48](https://github.com/LedgityLabs/LedgityYield/commit/b914b4840be122a74a4446aa9fb53fbd655cb406)) +- improve activity monitoring alert messages ([b914b48](https://github.com/LedgityLabs/LedgityYield/commit/b914b4840be122a74a4446aa9fb53fbd655cb406)) ## [1.253.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.253.1...v1.253.2) (2024-04-10) - ### Fixes -* wrong logs key access in inspect transaction ([44ddd3a](https://github.com/LedgityLabs/LedgityYield/commit/44ddd3af108d4474c84e78be57c1f706ae31887c)) +- wrong logs key access in inspect transaction ([44ddd3a](https://github.com/LedgityLabs/LedgityYield/commit/44ddd3af108d4474c84e78be57c1f706ae31887c)) ## [1.253.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.253.0...v1.253.1) (2024-04-10) - ### Fixes -* properly parse logs of Tenderly webhook's payload ([28295ac](https://github.com/LedgityLabs/LedgityYield/commit/28295ace42cde782e6b94e5480877af59954c606)) +- properly parse logs of Tenderly webhook's payload ([28295ac](https://github.com/LedgityLabs/LedgityYield/commit/28295ace42cde782e6b94e5480877af59954c606)) ## [1.253.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.252.0...v1.253.0) (2024-04-10) - ### Features -* refactor AML endpoints and expose a transaction analysis webhook ([f428395](https://github.com/LedgityLabs/LedgityYield/commit/f42839529db9ab28a412610bdcc41338325b478f)) +- refactor AML endpoints and expose a transaction analysis webhook ([f428395](https://github.com/LedgityLabs/LedgityYield/commit/f42839529db9ab28a412610bdcc41338325b478f)) ## [1.252.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.251.0...v1.252.0) (2024-04-10) - ### Features -* implement ChainAnalysis OFAC sanctions screener ([81645b0](https://github.com/LedgityLabs/LedgityYield/commit/81645b05d2af7fb4818db842813727c2b2a817fc)) -* optimize AML endpoint caching ([785f2c9](https://github.com/LedgityLabs/LedgityYield/commit/785f2c9be34adb440394a1f0b54639672c604812)) +- implement ChainAnalysis OFAC sanctions screener ([81645b0](https://github.com/LedgityLabs/LedgityYield/commit/81645b05d2af7fb4818db842813727c2b2a817fc)) +- optimize AML endpoint caching ([785f2c9](https://github.com/LedgityLabs/LedgityYield/commit/785f2c9be34adb440394a1f0b54639672c604812)) ## [1.251.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.250.4...v1.251.0) (2024-04-10) - ### Features -* exclude ScoreChain 404 and 422 errors from alert ([22fa2f7](https://github.com/LedgityLabs/LedgityYield/commit/22fa2f79bb41c4b1322c98f728a803f698c03008)) +- exclude ScoreChain 404 and 422 errors from alert ([22fa2f7](https://github.com/LedgityLabs/LedgityYield/commit/22fa2f79bb41c4b1322c98f728a803f698c03008)) ## [1.250.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.250.3...v1.250.4) (2024-04-09) - ### Fixes -* re-enable ScoreChain request's cache ([c16c389](https://github.com/LedgityLabs/LedgityYield/commit/c16c389686182c2c88d4550e0b464e47afb70039)) +- re-enable ScoreChain request's cache ([c16c389](https://github.com/LedgityLabs/LedgityYield/commit/c16c389686182c2c88d4550e0b464e47afb70039)) ## [1.250.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.250.2...v1.250.3) (2024-04-09) - ### Fixes -* line break in IPINFO response was causing false positives ([70ce96c](https://github.com/LedgityLabs/LedgityYield/commit/70ce96c6344949c05483eccb7dd593f48d67a81c)) +- line break in IPINFO response was causing false positives ([70ce96c](https://github.com/LedgityLabs/LedgityYield/commit/70ce96c6344949c05483eccb7dd593f48d67a81c)) ## [1.250.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.250.1...v1.250.2) (2024-04-09) - ### Fixes -* iPINFO response parsing + cache the response ([675a59c](https://github.com/LedgityLabs/LedgityYield/commit/675a59c71f8e21609dd5da359379f01ac3b3e92f)) +- iPINFO response parsing + cache the response ([675a59c](https://github.com/LedgityLabs/LedgityYield/commit/675a59c71f8e21609dd5da359379f01ac3b3e92f)) ## [1.250.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.250.0...v1.250.1) (2024-04-09) - ### Fixes -* enable useRestricted() hook to work when no wallet is connected ([d2f59e6](https://github.com/LedgityLabs/LedgityYield/commit/d2f59e6cd4bddb46c072d5cf0fc6211ecad79bff)) +- enable useRestricted() hook to work when no wallet is connected ([d2f59e6](https://github.com/LedgityLabs/LedgityYield/commit/d2f59e6cd4bddb46c072d5cf0fc6211ecad79bff)) ## [1.250.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.249.0...v1.250.0) (2024-04-09) - ### Features -* add extra layers of AML protection ([0cce492](https://github.com/LedgityLabs/LedgityYield/commit/0cce4926a25e62c64c890d739537a63085ecbed6)) +- add extra layers of AML protection ([0cce492](https://github.com/LedgityLabs/LedgityYield/commit/0cce4926a25e62c64c890d739537a63085ecbed6)) ## [1.249.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.248.3...v1.249.0) (2024-04-09) - ### Features -* update Pre-Mining page to reflect end of the event and enable to unlock deposited USDC ([adeb0df](https://github.com/LedgityLabs/LedgityYield/commit/adeb0dffdb3bfd46c1e846673ec7525d95976730)) +- update Pre-Mining page to reflect end of the event and enable to unlock deposited USDC ([adeb0df](https://github.com/LedgityLabs/LedgityYield/commit/adeb0dffdb3bfd46c1e846673ec7525d95976730)) ## [1.248.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.248.2...v1.248.3) (2024-03-29) - ### Fixes -* remove unused env variables, and mark as optional the airdrop ones ([2c35d78](https://github.com/LedgityLabs/LedgityYield/commit/2c35d78a4618d720cc361b42edc0cc05f5a8a173)) +- remove unused env variables, and mark as optional the airdrop ones ([2c35d78](https://github.com/LedgityLabs/LedgityYield/commit/2c35d78a4618d720cc361b42edc0cc05f5a8a173)) ## [1.248.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.248.1...v1.248.2) (2024-03-28) - ### Fixes -* **contracts:** deployment scripts syntax error ([e0027b2](https://github.com/LedgityLabs/LedgityYield/commit/e0027b297166e415b19087c70571b8d335633f75)) +- **contracts:** deployment scripts syntax error ([e0027b2](https://github.com/LedgityLabs/LedgityYield/commit/e0027b297166e415b19087c70571b8d335633f75)) ## [1.248.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.248.0...v1.248.1) (2024-03-23) - ### Fixes -* temporarily remove pre-mining to prevent confusing with Intract campaign ([97f5338](https://github.com/LedgityLabs/LedgityYield/commit/97f53382ca322033d460f10e8a08d6163c1e94df)) +- temporarily remove pre-mining to prevent confusing with Intract campaign ([97f5338](https://github.com/LedgityLabs/LedgityYield/commit/97f53382ca322033d460f10e8a08d6163c1e94df)) ## [1.248.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.247.3...v1.248.0) (2024-03-21) - ### Features -* add dynamic holders count ([f0bce07](https://github.com/LedgityLabs/LedgityYield/commit/f0bce07cf79ab031f933233994c4624d43c555f0)) +- add dynamic holders count ([f0bce07](https://github.com/LedgityLabs/LedgityYield/commit/f0bce07cf79ab031f933233994c4624d43c555f0)) ## [1.247.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.247.2...v1.247.3) (2024-03-14) - ### Fixes -* remove OKX X1 from mainnet value computations ([e5ce5bf](https://github.com/LedgityLabs/LedgityYield/commit/e5ce5bf7fed95ac56ed048c11f77e8805a5f1239)) +- remove OKX X1 from mainnet value computations ([e5ce5bf](https://github.com/LedgityLabs/LedgityYield/commit/e5ce5bf7fed95ac56ed048c11f77e8805a5f1239)) ## [1.247.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.247.1...v1.247.2) (2024-03-09) - ### Fixes -* resolve audit info F-2024-1182 ([26f2c61](https://github.com/LedgityLabs/LedgityYield/commit/26f2c612ef819941524756e8ca69c3aabb996320)) -* resolve audit info f-2024-1190 ([6fd9d21](https://github.com/LedgityLabs/LedgityYield/commit/6fd9d2123da96147f4919264b4b917e55385b839)) -* resolve audit low F-2024-1188 ([3505bdb](https://github.com/LedgityLabs/LedgityYield/commit/3505bdb2095d0816fb398b24d03c42a7f3ec6442)) +- resolve audit info F-2024-1182 ([26f2c61](https://github.com/LedgityLabs/LedgityYield/commit/26f2c612ef819941524756e8ca69c3aabb996320)) +- resolve audit info f-2024-1190 ([6fd9d21](https://github.com/LedgityLabs/LedgityYield/commit/6fd9d2123da96147f4919264b4b917e55385b839)) +- resolve audit low F-2024-1188 ([3505bdb](https://github.com/LedgityLabs/LedgityYield/commit/3505bdb2095d0816fb398b24d03c42a7f3ec6442)) ## [1.247.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.247.0...v1.247.1) (2024-03-07) - ### Fixes -* supply % typo ([3507936](https://github.com/LedgityLabs/LedgityYield/commit/35079368f29cf47c539b5aab1cb7597c5313b6c9)) -* update airdrop infos ([e16a404](https://github.com/LedgityLabs/LedgityYield/commit/e16a40423fc4727596abb15ef67de7dd13ad41a5)) +- supply % typo ([3507936](https://github.com/LedgityLabs/LedgityYield/commit/35079368f29cf47c539b5aab1cb7597c5313b6c9)) +- update airdrop infos ([e16a404](https://github.com/LedgityLabs/LedgityYield/commit/e16a40423fc4727596abb15ef67de7dd13ad41a5)) ## [1.247.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.246.1...v1.247.0) (2024-03-06) - ### Features -* improve UX of new big withdrawal requests processing buttons ([cb9a2de](https://github.com/LedgityLabs/LedgityYield/commit/cb9a2decbcf140f848c741046a57827ad4af9f23)) +- improve UX of new big withdrawal requests processing buttons ([cb9a2de](https://github.com/LedgityLabs/LedgityYield/commit/cb9a2decbcf140f848c741046a57827ad4af9f23)) ## [1.246.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.246.0...v1.246.1) (2024-03-06) - ### Fixes -* hot patch of withdrawal requests admin ([ff3a51b](https://github.com/LedgityLabs/LedgityYield/commit/ff3a51b4952270f0e77d45732db1e79f6bead941)) +- hot patch of withdrawal requests admin ([ff3a51b](https://github.com/LedgityLabs/LedgityYield/commit/ff3a51b4952270f0e77d45732db1e79f6bead941)) ## [1.246.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.6...v1.246.0) (2024-03-02) - ### Features -* trigger release of OKX x1 subgraph implementation ([cb41e6f](https://github.com/LedgityLabs/LedgityYield/commit/cb41e6f8ecb74e2626b4260ce173cee0504d5969)) - +- trigger release of OKX x1 subgraph implementation ([cb41e6f](https://github.com/LedgityLabs/LedgityYield/commit/cb41e6f8ecb74e2626b4260ce173cee0504d5969)) ### Docs -* sUD.sol docs improvements ([3be14b8](https://github.com/LedgityLabs/LedgityYield/commit/3be14b826f7425c926b0f63fb1d2c53c9e0fb248)) - +- sUD.sol docs improvements ([3be14b8](https://github.com/LedgityLabs/LedgityYield/commit/3be14b826f7425c926b0f63fb1d2c53c9e0fb248)) ### Tests -* add few missing unit tests, plus a ton of docs improvements ([199fccd](https://github.com/LedgityLabs/LedgityYield/commit/199fccd4f8826f602fda4ac4e94bafe703d4457d)) - +- add few missing unit tests, plus a ton of docs improvements ([199fccd](https://github.com/LedgityLabs/LedgityYield/commit/199fccd4f8826f602fda4ac4e94bafe703d4457d)) ### Others -* fix Slither CI ([7be62a5](https://github.com/LedgityLabs/LedgityYield/commit/7be62a5577a2719659ca5a0f17e25d722c07663b)) -* fix unit tests CI ([202a16d](https://github.com/LedgityLabs/LedgityYield/commit/202a16d53d9f799e5b03742db445322ac361b7b6)) -* give missing Hardhat artifacts folder's path to Slither ([74ba73f](https://github.com/LedgityLabs/LedgityYield/commit/74ba73f9a81012e4a6040810b8f5413f7e2591e1)) -* remove Foundry nightly version from workflow file ([63e74d9](https://github.com/LedgityLabs/LedgityYield/commit/63e74d9103176a88449a4bd8fae30df551ac85c0)) -* revert comment trick ([6dfe410](https://github.com/LedgityLabs/LedgityYield/commit/6dfe4106a9729f1f1ad0f97d13e93de8bb0e2036)) +- fix Slither CI ([7be62a5](https://github.com/LedgityLabs/LedgityYield/commit/7be62a5577a2719659ca5a0f17e25d722c07663b)) +- fix unit tests CI ([202a16d](https://github.com/LedgityLabs/LedgityYield/commit/202a16d53d9f799e5b03742db445322ac361b7b6)) +- give missing Hardhat artifacts folder's path to Slither ([74ba73f](https://github.com/LedgityLabs/LedgityYield/commit/74ba73f9a81012e4a6040810b8f5413f7e2591e1)) +- remove Foundry nightly version from workflow file ([63e74d9](https://github.com/LedgityLabs/LedgityYield/commit/63e74d9103176a88449a4bd8fae30df551ac85c0)) +- revert comment trick ([6dfe410](https://github.com/LedgityLabs/LedgityYield/commit/6dfe4106a9729f1f1ad0f97d13e93de8bb0e2036)) ## [1.245.6](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.5...v1.245.6) (2024-02-19) - ### Fixes -* trigger release ([8d8aef2](https://github.com/LedgityLabs/LedgityYield/commit/8d8aef2062a2a1b251e33524c5159b4667b4e7b2)) +- trigger release ([8d8aef2](https://github.com/LedgityLabs/LedgityYield/commit/8d8aef2062a2a1b251e33524c5159b4667b4e7b2)) ## [1.245.5](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.4...v1.245.5) (2024-02-18) - ### Fixes -* remove unused component + fix missing excluded files in .vscode/settings.json ([a102b77](https://github.com/LedgityLabs/LedgityYield/commit/a102b778e29c6dff3802da944afb00b859315d39)) +- remove unused component + fix missing excluded files in .vscode/settings.json ([a102b77](https://github.com/LedgityLabs/LedgityYield/commit/a102b778e29c6dff3802da944afb00b859315d39)) ## [1.245.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.3...v1.245.4) (2024-02-17) - ### Fixes -* fix merge conflict ([70fa5b5](https://github.com/LedgityLabs/LedgityYield/commit/70fa5b5ddd01b07b3e34554e822e013bd855a13b)) -* update deps ([1a36aaf](https://github.com/LedgityLabs/LedgityYield/commit/1a36aaf6ee31f3a0e26007a85fc0d917e1b46254)) +- fix merge conflict ([70fa5b5](https://github.com/LedgityLabs/LedgityYield/commit/70fa5b5ddd01b07b3e34554e822e013bd855a13b)) +- update deps ([1a36aaf](https://github.com/LedgityLabs/LedgityYield/commit/1a36aaf6ee31f3a0e26007a85fc0d917e1b46254)) ## [1.245.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.2...v1.245.3) (2024-02-17) - ### Fixes -* broken tsconfig file ([0981196](https://github.com/LedgityLabs/LedgityYield/commit/0981196e78d4fc276ad65ac0e29b6e1c9ca37d4b)) -* remove CGPT comments and move OKX Testnet to prod chains ([3bfca72](https://github.com/LedgityLabs/LedgityYield/commit/3bfca72f47f2ce83ea1d3971b944764a7339670b)) -* remove pnpm lock file, and upgrade to Bun on in releaserc ([7e01b3c](https://github.com/LedgityLabs/LedgityYield/commit/7e01b3cdae3271a2090d8904b5042520a21a5e45)) -* typeErrors in AppInvestTokens.tsx ([a7a2b49](https://github.com/LedgityLabs/LedgityYield/commit/a7a2b4966da4dc2286dec9139be671341eefe69a)) -* typo in workflow files ([c32c96e](https://github.com/LedgityLabs/LedgityYield/commit/c32c96e54f054858b17ef18314e7b3141a2dd3f3)) - +- broken tsconfig file ([0981196](https://github.com/LedgityLabs/LedgityYield/commit/0981196e78d4fc276ad65ac0e29b6e1c9ca37d4b)) +- remove CGPT comments and move OKX Testnet to prod chains ([3bfca72](https://github.com/LedgityLabs/LedgityYield/commit/3bfca72f47f2ce83ea1d3971b944764a7339670b)) +- remove pnpm lock file, and upgrade to Bun on in releaserc ([7e01b3c](https://github.com/LedgityLabs/LedgityYield/commit/7e01b3cdae3271a2090d8904b5042520a21a5e45)) +- typeErrors in AppInvestTokens.tsx ([a7a2b49](https://github.com/LedgityLabs/LedgityYield/commit/a7a2b4966da4dc2286dec9139be671341eefe69a)) +- typo in workflow files ([c32c96e](https://github.com/LedgityLabs/LedgityYield/commit/c32c96e54f054858b17ef18314e7b3141a2dd3f3)) ### Others -* upgrade to Bun in workflow files also ([e04faeb](https://github.com/LedgityLabs/LedgityYield/commit/e04faeb4541304651bede2d86f0d58e8174090c1)) +- upgrade to Bun in workflow files also ([e04faeb](https://github.com/LedgityLabs/LedgityYield/commit/e04faeb4541304651bede2d86f0d58e8174090c1)) ## [1.245.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.1...v1.245.2) (2024-02-16) - ### Fixes -* upgrade @graphql-mesh/transform-prefix to v0.96.5 ([070265f](https://github.com/LedgityLabs/LedgityYield/commit/070265f8f2bde02f15ff384aa018aa4aa98c4fa2)) - +- upgrade @graphql-mesh/transform-prefix to v0.96.5 ([070265f](https://github.com/LedgityLabs/LedgityYield/commit/070265f8f2bde02f15ff384aa018aa4aa98c4fa2)) ### Others -* **deps:** update actions/setup-node action to v4 ([d77dea0](https://github.com/LedgityLabs/LedgityYield/commit/d77dea07a8de7ac3c712a46ed1af6ee01571ce4f)) -* fix extra-abi script, not a module ([6c7c1f6](https://github.com/LedgityLabs/LedgityYield/commit/6c7c1f6041b4852a9d3c420bf661e3102ef08ab1)) -* remove pnpm lock file ([4d0fe4a](https://github.com/LedgityLabs/LedgityYield/commit/4d0fe4af8c8623b24761e9ec770d2b42730b12bf)) +- **deps:** update actions/setup-node action to v4 ([d77dea0](https://github.com/LedgityLabs/LedgityYield/commit/d77dea07a8de7ac3c712a46ed1af6ee01571ce4f)) +- fix extra-abi script, not a module ([6c7c1f6](https://github.com/LedgityLabs/LedgityYield/commit/6c7c1f6041b4852a9d3c420bf661e3102ef08ab1)) +- remove pnpm lock file ([4d0fe4a](https://github.com/LedgityLabs/LedgityYield/commit/4d0fe4af8c8623b24761e9ec770d2b42730b12bf)) ## [1.245.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.245.0...v1.245.1) (2024-02-14) - ### Fixes -* fix build type error ([4a50b93](https://github.com/LedgityLabs/LedgityYield/commit/4a50b9366201cca46e1108dbbfa12f00c9005d19)) +- fix build type error ([4a50b93](https://github.com/LedgityLabs/LedgityYield/commit/4a50b9366201cca46e1108dbbfa12f00c9005d19)) ## [1.245.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.244.0...v1.245.0) (2024-02-14) - ### Features -* re-enable fixed graphclient, plus remove additional stale code ([c2c25ab](https://github.com/LedgityLabs/LedgityYield/commit/c2c25ab25a20700d35008dba592d7514e2bf9a2b)) -* upgrade codebase to Viem, Wagmi and RainbowKit v2 + clean stale works like animations + ([e50aa21](https://github.com/LedgityLabs/LedgityYield/commit/e50aa21d7da8b5d0a0f44cd3da7c5bfbf45da27f)) - +- re-enable fixed graphclient, plus remove additional stale code ([c2c25ab](https://github.com/LedgityLabs/LedgityYield/commit/c2c25ab25a20700d35008dba592d7514e2bf9a2b)) +- upgrade codebase to Viem, Wagmi and RainbowKit v2 + clean stale works like animations + ([e50aa21](https://github.com/LedgityLabs/LedgityYield/commit/e50aa21d7da8b5d0a0f44cd3da7c5bfbf45da27f)) ### Fixes -* declutter dev server by disabling usages of graphclient and fixing auto-prefix warning ([a49840b](https://github.com/LedgityLabs/LedgityYield/commit/a49840b3aa3c594d0cf6649b57fe4319be11e9fb)) - +- declutter dev server by disabling usages of graphclient and fixing auto-prefix warning ([a49840b](https://github.com/LedgityLabs/LedgityYield/commit/a49840b3aa3c594d0cf6649b57fe4319be11e9fb)) ### Docs -* add a quick docs to run Slither tests ([7e87a72](https://github.com/LedgityLabs/LedgityYield/commit/7e87a723785a24f7c952d988c033d455df9b1121)) - +- add a quick docs to run Slither tests ([7e87a72](https://github.com/LedgityLabs/LedgityYield/commit/7e87a723785a24f7c952d988c033d455df9b1121)) ### Others -* **deps:** update dependency tailwind-merge to v2 ([71cbe71](https://github.com/LedgityLabs/LedgityYield/commit/71cbe71f2e5fa837d0bbd2b73b49cf514d8ddaa8)) -* **deps:** update nextjs monorepo to v14 ([9ff85d5](https://github.com/LedgityLabs/LedgityYield/commit/9ff85d5fa948f025db9ed8e2904b5cbf9e5875c6)) -* major upgrade many deps ([82f67a9](https://github.com/LedgityLabs/LedgityYield/commit/82f67a9c1e9f21936d68f5114d6d207be8a7659f)) -* remove package-lock.json file ([1872151](https://github.com/LedgityLabs/LedgityYield/commit/18721510f716d13e3c14143bb38844c26c60d2df)) -* update Slither action's version ([4341a65](https://github.com/LedgityLabs/LedgityYield/commit/4341a65ccddaafbc0495b752dafa12162cfaf6f6)) -* use Bun as package manager + document running the frontend locally ([a1773d9](https://github.com/LedgityLabs/LedgityYield/commit/a1773d9ea9e50c26469bbde9dca746f1cc1fe429)) +- **deps:** update dependency tailwind-merge to v2 ([71cbe71](https://github.com/LedgityLabs/LedgityYield/commit/71cbe71f2e5fa837d0bbd2b73b49cf514d8ddaa8)) +- **deps:** update nextjs monorepo to v14 ([9ff85d5](https://github.com/LedgityLabs/LedgityYield/commit/9ff85d5fa948f025db9ed8e2904b5cbf9e5875c6)) +- major upgrade many deps ([82f67a9](https://github.com/LedgityLabs/LedgityYield/commit/82f67a9c1e9f21936d68f5114d6d207be8a7659f)) +- remove package-lock.json file ([1872151](https://github.com/LedgityLabs/LedgityYield/commit/18721510f716d13e3c14143bb38844c26c60d2df)) +- update Slither action's version ([4341a65](https://github.com/LedgityLabs/LedgityYield/commit/4341a65ccddaafbc0495b752dafa12162cfaf6f6)) +- use Bun as package manager + document running the frontend locally ([a1773d9](https://github.com/LedgityLabs/LedgityYield/commit/a1773d9ea9e50c26469bbde9dca746f1cc1fe429)) ## [1.244.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.243.1...v1.244.0) (2023-12-30) - ### Features -* add fees rate updater in L-Tokens admin ([04a37f7](https://github.com/LedgityLabs/LedgityYield/commit/04a37f7839fa3ae5dd800cdd68c6cd22ab225d5f)) +- add fees rate updater in L-Tokens admin ([04a37f7](https://github.com/LedgityLabs/LedgityYield/commit/04a37f7839fa3ae5dd800cdd68c6cd22ab225d5f)) ## [1.243.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.243.0...v1.243.1) (2023-12-28) - ### Fixes -* fix repatriate section and improve approval wording ([d2e0623](https://github.com/LedgityLabs/LedgityYield/commit/d2e0623b4165db245a5e7feb45e2c90709871e15)) +- fix repatriate section and improve approval wording ([d2e0623](https://github.com/LedgityLabs/LedgityYield/commit/d2e0623b4165db245a5e7feb45e2c90709871e15)) ## [1.243.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.242.4...v1.243.0) (2023-12-28) - ### Features -* re-enable repatriate box in L-Tokens admin ([861e561](https://github.com/LedgityLabs/LedgityYield/commit/861e561747a16a23c203d8dd84f2ef3633bec4c7)) +- re-enable repatriate box in L-Tokens admin ([861e561](https://github.com/LedgityLabs/LedgityYield/commit/861e561747a16a23c203d8dd84f2ef3633bec4c7)) ## [1.242.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.242.3...v1.242.4) (2023-12-28) - ### Fixes -* fix Next Auth Prisma error ([bf9d989](https://github.com/LedgityLabs/LedgityYield/commit/bf9d989d32842885c7e7824917cef30820de947a)) +- fix Next Auth Prisma error ([bf9d989](https://github.com/LedgityLabs/LedgityYield/commit/bf9d989d32842885c7e7824917cef30820de947a)) ## [1.242.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.242.2...v1.242.3) (2023-12-28) - ### Fixes -* fix infinite reload on withrawal requests component ([506f406](https://github.com/LedgityLabs/LedgityYield/commit/506f4063a8b14b083f17e051aa61586657405505)) -* upgrade deps and remove some console logs ([34c23ab](https://github.com/LedgityLabs/LedgityYield/commit/34c23abdd734dd6756e7f29f9317c1660ab706fa)) +- fix infinite reload on withrawal requests component ([506f406](https://github.com/LedgityLabs/LedgityYield/commit/506f4063a8b14b083f17e051aa61586657405505)) +- upgrade deps and remove some console logs ([34c23ab](https://github.com/LedgityLabs/LedgityYield/commit/34c23abdd734dd6756e7f29f9317c1660ab706fa)) ## [1.242.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.242.1...v1.242.2) (2023-12-18) - ### Fixes -* fix 0 repatriated amount in admin ([19ad68b](https://github.com/LedgityLabs/LedgityYield/commit/19ad68b478880b2757be6dcef191a66baf2500df)) +- fix 0 repatriated amount in admin ([19ad68b](https://github.com/LedgityLabs/LedgityYield/commit/19ad68b478880b2757be6dcef191a66baf2500df)) ## [1.242.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.242.0...v1.242.1) (2023-12-14) - ### Fixes -* upgrade deps (especially Wagmi to fix Ledger security vulnerability) ([6d4ee3c](https://github.com/LedgityLabs/LedgityYield/commit/6d4ee3c26c2ec2eff53172ea1e20302f5beac6cb)) +- upgrade deps (especially Wagmi to fix Ledger security vulnerability) ([6d4ee3c](https://github.com/LedgityLabs/LedgityYield/commit/6d4ee3c26c2ec2eff53172ea1e20302f5beac6cb)) ## [1.242.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.241.0...v1.242.0) (2023-11-28) - ### Features -* reveal Arthera on the airdrop page ([02350ae](https://github.com/LedgityLabs/LedgityYield/commit/02350ae3d3d42e50eca4b05e6def1ba949a67509)) +- reveal Arthera on the airdrop page ([02350ae](https://github.com/LedgityLabs/LedgityYield/commit/02350ae3d3d42e50eca4b05e6def1ba949a67509)) ## [1.241.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.240.0...v1.241.0) (2023-11-08) - ### Features -* reveal HorizonDEX airdropped token ([93c9a8f](https://github.com/LedgityLabs/LedgityYield/commit/93c9a8ffabf9a820c61741688a1fc1140bc6be6e)) +- reveal HorizonDEX airdropped token ([93c9a8f](https://github.com/LedgityLabs/LedgityYield/commit/93c9a8ffabf9a820c61741688a1fc1140bc6be6e)) ## [1.240.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.239.2...v1.240.0) (2023-10-30) - ### Features -* increase Pre-Mining airdrop points + new limited-time Pre-mining bonus ([da43489](https://github.com/LedgityLabs/LedgityYield/commit/da43489dd50f5de39d0efb9aa11a4b07ef61704b)) +- increase Pre-Mining airdrop points + new limited-time Pre-mining bonus ([da43489](https://github.com/LedgityLabs/LedgityYield/commit/da43489dd50f5de39d0efb9aa11a4b07ef61704b)) ## [1.239.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.239.1...v1.239.2) (2023-10-29) - ### Fixes -* try to fix render error ([7d20137](https://github.com/LedgityLabs/LedgityYield/commit/7d2013740cfce3d6ae28b79035aa14c3a8b0f94c)) +- try to fix render error ([7d20137](https://github.com/LedgityLabs/LedgityYield/commit/7d2013740cfce3d6ae28b79035aa14c3a8b0f94c)) ## [1.239.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.239.0...v1.239.1) (2023-10-28) - ### Fixes -* fix copy referral link button ([abb8542](https://github.com/LedgityLabs/LedgityYield/commit/abb8542c42bdc1b08adc01a4f1c81727a3b24a54)) +- fix copy referral link button ([abb8542](https://github.com/LedgityLabs/LedgityYield/commit/abb8542c42bdc1b08adc01a4f1c81727a3b24a54)) ## [1.239.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.238.1...v1.239.0) (2023-10-28) - ### Features -* new Pre-Mining Referral program ([ccca283](https://github.com/LedgityLabs/LedgityYield/commit/ccca2837e1fd11f649ab09f30eee96f25da04a56)) +- new Pre-Mining Referral program ([ccca283](https://github.com/LedgityLabs/LedgityYield/commit/ccca2837e1fd11f649ab09f30eee96f25da04a56)) ## [1.238.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.238.0...v1.238.1) (2023-10-23) - ### Fixes -* fix className on non-supporting component ([0c0d102](https://github.com/LedgityLabs/LedgityYield/commit/0c0d1024ba7c7b2c42b1352f588f6e7b327d4dbd)) +- fix className on non-supporting component ([0c0d102](https://github.com/LedgityLabs/LedgityYield/commit/0c0d1024ba7c7b2c42b1352f588f6e7b327d4dbd)) ## [1.238.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.237.0...v1.238.0) (2023-10-23) - ### Features -* upgrade holders count ([fad2724](https://github.com/LedgityLabs/LedgityYield/commit/fad2724fc59e60e010fa09a5e6f4a5d967050f87)) +- upgrade holders count ([fad2724](https://github.com/LedgityLabs/LedgityYield/commit/fad2724fc59e60e010fa09a5e6f4a5d967050f87)) ## [1.237.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.236.0...v1.237.0) (2023-10-19) - ### Features -* upgrade deps ([28f16a8](https://github.com/LedgityLabs/LedgityYield/commit/28f16a8173852bdbe21c98244913c111530abf55)) - +- upgrade deps ([28f16a8](https://github.com/LedgityLabs/LedgityYield/commit/28f16a8173852bdbe21c98244913c111530abf55)) ### Fixes -* resolve merge conflict ([305050d](https://github.com/LedgityLabs/LedgityYield/commit/305050d881754b97066eb9f31f8d014f755e371f)) +- resolve merge conflict ([305050d](https://github.com/LedgityLabs/LedgityYield/commit/305050d881754b97066eb9f31f8d014f755e371f)) ## [1.236.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.235.2...v1.236.0) (2023-10-19) - ### Features -* add Twitter login indicator to airdrop page + lazy loaded images ([6c7531a](https://github.com/LedgityLabs/LedgityYield/commit/6c7531a1f568cac3c1d4571acecfb2b0346719ae)) - +- add Twitter login indicator to airdrop page + lazy loaded images ([6c7531a](https://github.com/LedgityLabs/LedgityYield/commit/6c7531a1f568cac3c1d4571acecfb2b0346719ae)) ### Fixes -* **deps:** update dependency @radix-ui/react-select to v2 ([68e234f](https://github.com/LedgityLabs/LedgityYield/commit/68e234fb2867ddd2d7f9385fdcb565fb3e75908b)) - +- **deps:** update dependency @radix-ui/react-select to v2 ([68e234f](https://github.com/LedgityLabs/LedgityYield/commit/68e234fb2867ddd2d7f9385fdcb565fb3e75908b)) ### Others -* **deps:** update dependency @openzeppelin/contracts-upgradeable to v5 ([e58282a](https://github.com/LedgityLabs/LedgityYield/commit/e58282a22f8d8cc6add3defd361839e59a275552)) -* **deps:** update dependency @types/node to v20.8.7 ([38cdc93](https://github.com/LedgityLabs/LedgityYield/commit/38cdc938222a1509957e027ba016b0a2deb93fb6)) -* **deps:** update dependency eslint to v8.51.0 ([4d742b1](https://github.com/LedgityLabs/LedgityYield/commit/4d742b11536127f914c22c94cfddc04261b38c24)) -* **deps:** update dependency postcss to v8.4.31 ([4fa2679](https://github.com/LedgityLabs/LedgityYield/commit/4fa267911fbe31ee0e7586ee70638e648ecf1dad)) -* **deps:** update nextjs monorepo to v13.5.5 ([4076eed](https://github.com/LedgityLabs/LedgityYield/commit/4076eed56b051c49c101e0067c419a3ae1b87fb1)) -* **deps:** update react monorepo ([bfb2fb5](https://github.com/LedgityLabs/LedgityYield/commit/bfb2fb516b8b109667936ff4d5cdf618927a8d9a)) +- **deps:** update dependency @openzeppelin/contracts-upgradeable to v5 ([e58282a](https://github.com/LedgityLabs/LedgityYield/commit/e58282a22f8d8cc6add3defd361839e59a275552)) +- **deps:** update dependency @types/node to v20.8.7 ([38cdc93](https://github.com/LedgityLabs/LedgityYield/commit/38cdc938222a1509957e027ba016b0a2deb93fb6)) +- **deps:** update dependency eslint to v8.51.0 ([4d742b1](https://github.com/LedgityLabs/LedgityYield/commit/4d742b11536127f914c22c94cfddc04261b38c24)) +- **deps:** update dependency postcss to v8.4.31 ([4fa2679](https://github.com/LedgityLabs/LedgityYield/commit/4fa267911fbe31ee0e7586ee70638e648ecf1dad)) +- **deps:** update nextjs monorepo to v13.5.5 ([4076eed](https://github.com/LedgityLabs/LedgityYield/commit/4076eed56b051c49c101e0067c419a3ae1b87fb1)) +- **deps:** update react monorepo ([bfb2fb5](https://github.com/LedgityLabs/LedgityYield/commit/bfb2fb516b8b109667936ff4d5cdf618927a8d9a)) ## [1.235.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.235.1...v1.235.2) (2023-10-16) - ### Fixes -* **deps:** update dependency @t3-oss/env-nextjs to ^0.7.0 ([a9827cb](https://github.com/LedgityLabs/LedgityYield/commit/a9827cb6917f85ef6f55fd50997f90f1183d97d8)) - +- **deps:** update dependency @t3-oss/env-nextjs to ^0.7.0 ([a9827cb](https://github.com/LedgityLabs/LedgityYield/commit/a9827cb6917f85ef6f55fd50997f90f1183d97d8)) ### Others -* **deps:** update dependency @openzeppelin/contracts to v5 ([50717a6](https://github.com/LedgityLabs/LedgityYield/commit/50717a699cb1c9304a2fb28014d478f6b33a5fe1)) -* **deps:** update dependency @types/node to v20.8.6 ([9ddcbec](https://github.com/LedgityLabs/LedgityYield/commit/9ddcbec14095774e000784d8ed781c2809066d12)) -* **deps:** update dependency autoprefixer to v10.4.16 ([b6aaaf8](https://github.com/LedgityLabs/LedgityYield/commit/b6aaaf849b44f48598dd3f465d74b92e62823bc2)) -* **deps:** update ipfs/go-ipfs docker tag to v0.23.0 ([6afa98f](https://github.com/LedgityLabs/LedgityYield/commit/6afa98f406297988ad23fcaa2b5c60d5100a5df6)) -* **deps:** update nextjs monorepo to v13.5.4 ([cf39559](https://github.com/LedgityLabs/LedgityYield/commit/cf395590e327fcbc91e11e80ad4c16a460e89438)) +- **deps:** update dependency @openzeppelin/contracts to v5 ([50717a6](https://github.com/LedgityLabs/LedgityYield/commit/50717a699cb1c9304a2fb28014d478f6b33a5fe1)) +- **deps:** update dependency @types/node to v20.8.6 ([9ddcbec](https://github.com/LedgityLabs/LedgityYield/commit/9ddcbec14095774e000784d8ed781c2809066d12)) +- **deps:** update dependency autoprefixer to v10.4.16 ([b6aaaf8](https://github.com/LedgityLabs/LedgityYield/commit/b6aaaf849b44f48598dd3f465d74b92e62823bc2)) +- **deps:** update ipfs/go-ipfs docker tag to v0.23.0 ([6afa98f](https://github.com/LedgityLabs/LedgityYield/commit/6afa98f406297988ad23fcaa2b5c60d5100a5df6)) +- **deps:** update nextjs monorepo to v13.5.4 ([cf39559](https://github.com/LedgityLabs/LedgityYield/commit/cf395590e327fcbc91e11e80ad4c16a460e89438)) ## [1.235.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.235.0...v1.235.1) (2023-10-16) - ### Fixes -* remove 1 day revealed token ([7433ac6](https://github.com/LedgityLabs/LedgityYield/commit/7433ac6c944e615ec2ee41d1c65c36bb01ec55d5)) +- remove 1 day revealed token ([7433ac6](https://github.com/LedgityLabs/LedgityYield/commit/7433ac6c944e615ec2ee41d1c65c36bb01ec55d5)) ## [1.235.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.234.2...v1.235.0) (2023-10-16) - ### Features -* reveal Velcore token ([001e1a3](https://github.com/LedgityLabs/LedgityYield/commit/001e1a36f63eadd6910f1c24a9a6f5ca27da5439)) +- reveal Velcore token ([001e1a3](https://github.com/LedgityLabs/LedgityYield/commit/001e1a36f63eadd6910f1c24a9a6f5ca27da5439)) ## [1.234.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.234.1...v1.234.2) (2023-10-14) - ### Fixes -* multi-airdrop documentation link wasn't target _blank ([74f0901](https://github.com/LedgityLabs/LedgityYield/commit/74f09010d05345ef51a876b1abc0d0b60c17aa6f)) +- multi-airdrop documentation link wasn't target \_blank ([74f0901](https://github.com/LedgityLabs/LedgityYield/commit/74f09010d05345ef51a876b1abc0d0b60c17aa6f)) ## [1.234.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.234.0...v1.234.1) (2023-10-14) - ### Fixes -* fix LYNX for veLYNX in tooltip ([38ce5e3](https://github.com/LedgityLabs/LedgityYield/commit/38ce5e3186ec546f94ea5be3d8e74152404106e6)) +- fix LYNX for veLYNX in tooltip ([38ce5e3](https://github.com/LedgityLabs/LedgityYield/commit/38ce5e3186ec546f94ea5be3d8e74152404106e6)) ## [1.234.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.233.4...v1.234.0) (2023-10-14) - ### Features -* add "Any question" section to the Multi-Airdrop page ([f35146b](https://github.com/LedgityLabs/LedgityYield/commit/f35146beb9718002d6eaa205782015099ceae87c)) +- add "Any question" section to the Multi-Airdrop page ([f35146b](https://github.com/LedgityLabs/LedgityYield/commit/f35146beb9718002d6eaa205782015099ceae87c)) ## [1.233.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.233.3...v1.233.4) (2023-10-14) - ### Fixes -* fix leaderboard empty state not well triggered ([09194de](https://github.com/LedgityLabs/LedgityYield/commit/09194dea893f7bb5928e296a1763f4a346b96079)) -* remove console log ([46de176](https://github.com/LedgityLabs/LedgityYield/commit/46de17651c90bbd52b517d0b5e7af723a3467d6f)) +- fix leaderboard empty state not well triggered ([09194de](https://github.com/LedgityLabs/LedgityYield/commit/09194dea893f7bb5928e296a1763f4a346b96079)) +- remove console log ([46de176](https://github.com/LedgityLabs/LedgityYield/commit/46de17651c90bbd52b517d0b5e7af723a3467d6f)) ## [1.233.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.233.2...v1.233.3) (2023-10-13) - ### Fixes -* remove unused env var ([4a91de7](https://github.com/LedgityLabs/LedgityYield/commit/4a91de77551befc7db0f6518fda1b1e0988dba89)) +- remove unused env var ([4a91de7](https://github.com/LedgityLabs/LedgityYield/commit/4a91de77551befc7db0f6518fda1b1e0988dba89)) ## [1.233.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.233.1...v1.233.2) (2023-10-13) - ### Fixes -* adjust token reveal dates ([a9293ef](https://github.com/LedgityLabs/LedgityYield/commit/a9293efe6f5663d546670bc73897a787c0c8133c)) +- adjust token reveal dates ([a9293ef](https://github.com/LedgityLabs/LedgityYield/commit/a9293efe6f5663d546670bc73897a787c0c8133c)) ## [1.233.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.233.0...v1.233.1) (2023-10-13) - ### Fixes -* fix user rank in leaderboard ([5ca7636](https://github.com/LedgityLabs/LedgityYield/commit/5ca7636a3701c4b0ce839e32d2abe9a350407295)) +- fix user rank in leaderboard ([5ca7636](https://github.com/LedgityLabs/LedgityYield/commit/5ca7636a3701c4b0ce839e32d2abe9a350407295)) ## [1.233.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.232.1...v1.233.0) (2023-10-13) - ### Features -* new leagues and leaderboards 🎉 ([8dbcb87](https://github.com/LedgityLabs/LedgityYield/commit/8dbcb874a272004d38c93fb2927b48145f4bfb7f)) +- new leagues and leaderboards 🎉 ([8dbcb87](https://github.com/LedgityLabs/LedgityYield/commit/8dbcb874a272004d38c93fb2927b48145f4bfb7f)) ## [1.232.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.232.0...v1.232.1) (2023-10-05) - ### Fixes -* **pre-mining:** limit amount of earn supply to max allocation ([53bf473](https://github.com/LedgityLabs/LedgityYield/commit/53bf4731d656c599741ba7c497b0c1a025c859b1)) +- **pre-mining:** limit amount of earn supply to max allocation ([53bf473](https://github.com/LedgityLabs/LedgityYield/commit/53bf4731d656c599741ba7c497b0c1a025c859b1)) ## [1.232.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.231.1...v1.232.0) (2023-10-04) - ### Features -* add colors to rejected and pending tweets icons ([5543cec](https://github.com/LedgityLabs/LedgityYield/commit/5543cecc3e74660b07aaafee4b4c3110fee84663)) +- add colors to rejected and pending tweets icons ([5543cec](https://github.com/LedgityLabs/LedgityYield/commit/5543cecc3e74660b07aaafee4b4c3110fee84663)) ## [1.231.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.231.0...v1.231.1) (2023-10-04) - ### Fixes -* fix broken fetchLeaderboard functions imports ([d6328fa](https://github.com/LedgityLabs/LedgityYield/commit/d6328faa008204391e1069091dd74a52ee93e43e)) +- fix broken fetchLeaderboard functions imports ([d6328fa](https://github.com/LedgityLabs/LedgityYield/commit/d6328faa008204391e1069091dd74a52ee93e43e)) ## [1.231.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.230.0...v1.231.0) (2023-10-04) - ### Features -* release Tweet & Earn ([a82ed6c](https://github.com/LedgityLabs/LedgityYield/commit/a82ed6c2570ed5c78b3129ef43fee2823a17f4ee)) +- release Tweet & Earn ([a82ed6c](https://github.com/LedgityLabs/LedgityYield/commit/a82ed6c2570ed5c78b3129ef43fee2823a17f4ee)) ## [1.230.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.229.0...v1.230.0) (2023-10-03) - ### Features -* disociate Zealy and Galxe data fetching so one still work if the other breaks ([c7ac4ad](https://github.com/LedgityLabs/LedgityYield/commit/c7ac4ad220bf20b2f25308799531b547e628de0b)) +- disociate Zealy and Galxe data fetching so one still work if the other breaks ([c7ac4ad](https://github.com/LedgityLabs/LedgityYield/commit/c7ac4ad220bf20b2f25308799531b547e628de0b)) ## [1.229.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.228.0...v1.229.0) (2023-10-03) - ### Features -* update Galxe batch link ([406c934](https://github.com/LedgityLabs/LedgityYield/commit/406c9348569b49a1bd6b4ece7ce650c798222964)) +- update Galxe batch link ([406c934](https://github.com/LedgityLabs/LedgityYield/commit/406c9348569b49a1bd6b4ece7ce650c798222964)) ## [1.228.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.227.0...v1.228.0) (2023-10-03) - ### Features -* improved Tweet & Earn UI, updated DB schema, otherUI improvements ([9f9b253](https://github.com/LedgityLabs/LedgityYield/commit/9f9b2530e2d0ca6e691bfa62a25560684dafb647)) +- improved Tweet & Earn UI, updated DB schema, otherUI improvements ([9f9b253](https://github.com/LedgityLabs/LedgityYield/commit/9f9b2530e2d0ca6e691bfa62a25560684dafb647)) ## [1.227.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.226.1...v1.227.0) (2023-09-29) - ### Features -* improve Pre-Mining UX + continue working on Tweet & Earn ([d6c1e9d](https://github.com/LedgityLabs/LedgityYield/commit/d6c1e9de98ae2426a657f2c831a7ca4e102a4f1b)) +- improve Pre-Mining UX + continue working on Tweet & Earn ([d6c1e9d](https://github.com/LedgityLabs/LedgityYield/commit/d6c1e9de98ae2426a657f2c831a7ca4e102a4f1b)) ## [1.226.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.226.0...v1.226.1) (2023-09-28) - ### Fixes -* lynex token name ([5645995](https://github.com/LedgityLabs/LedgityYield/commit/56459953711931d5c6a189ff43e54656c0e1690c)) +- lynex token name ([5645995](https://github.com/LedgityLabs/LedgityYield/commit/56459953711931d5c6a189ff43e54656c0e1690c)) ## [1.226.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.225.0...v1.226.0) (2023-09-28) - ### Features -* reveal Lynex on Airdrop page ([e78d782](https://github.com/LedgityLabs/LedgityYield/commit/e78d782d242f227a530db38f00087ccfa982f9f8)) -* update Galxe batch link ([cd58e54](https://github.com/LedgityLabs/LedgityYield/commit/cd58e54c85dc6e913bf1396e7ca59c392df0b9ca)) +- reveal Lynex on Airdrop page ([e78d782](https://github.com/LedgityLabs/LedgityYield/commit/e78d782d242f227a530db38f00087ccfa982f9f8)) +- update Galxe batch link ([cd58e54](https://github.com/LedgityLabs/LedgityYield/commit/cd58e54c85dc6e913bf1396e7ca59c392df0b9ca)) ## [1.225.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.224.2...v1.225.0) (2023-09-28) - ### Features -* align abar appearence with the new UI ([02847aa](https://github.com/LedgityLabs/LedgityYield/commit/02847aae4bd39a06e1acf555ffb024200e060239)) +- align abar appearence with the new UI ([02847aa](https://github.com/LedgityLabs/LedgityYield/commit/02847aae4bd39a06e1acf555ffb024200e060239)) ## [1.224.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.224.1...v1.224.2) (2023-09-28) - ### Fixes -* zealy entries count displayed before login ([791b8e4](https://github.com/LedgityLabs/LedgityYield/commit/791b8e4abd127b0af15e11316e5b2002f28f85ed)) +- zealy entries count displayed before login ([791b8e4](https://github.com/LedgityLabs/LedgityYield/commit/791b8e4abd127b0af15e11316e5b2002f28f85ed)) ## [1.224.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.224.0...v1.224.1) (2023-09-28) - ### Fixes -* prisma generation error on Vercel ([88be100](https://github.com/LedgityLabs/LedgityYield/commit/88be1001065fd78e645a81d52f9216946ef3475c)) +- prisma generation error on Vercel ([88be100](https://github.com/LedgityLabs/LedgityYield/commit/88be1001065fd78e645a81d52f9216946ef3475c)) ## [1.224.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.223.0...v1.224.0) (2023-09-28) - ### Features -* new airdrop UI + sign-in with Twitter workflow + tweet to earn ([843362b](https://github.com/LedgityLabs/LedgityYield/commit/843362b88cbc930f6c066aa8c8f57180d30a1045)) +- new airdrop UI + sign-in with Twitter workflow + tweet to earn ([843362b](https://github.com/LedgityLabs/LedgityYield/commit/843362b88cbc930f6c066aa8c8f57180d30a1045)) ## [1.223.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.222.1...v1.223.0) (2023-09-21) - ### Features -* upload lightweight og images + new airdrop header banner ([cd3b2de](https://github.com/LedgityLabs/LedgityYield/commit/cd3b2deb2fad8a08520bb15ab657bf1baf63bb1d)) +- upload lightweight og images + new airdrop header banner ([cd3b2de](https://github.com/LedgityLabs/LedgityYield/commit/cd3b2deb2fad8a08520bb15ab657bf1baf63bb1d)) ## [1.222.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.222.0...v1.222.1) (2023-09-21) - ### Fixes -* use highest XP accounts when Zealy user associated its address to many accounts ([939ea12](https://github.com/LedgityLabs/LedgityYield/commit/939ea12abd892ef41130d809a8cdc5abd0f76efb)) +- use highest XP accounts when Zealy user associated its address to many accounts ([939ea12](https://github.com/LedgityLabs/LedgityYield/commit/939ea12abd892ef41130d809a8cdc5abd0f76efb)) ## [1.222.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.221.1...v1.222.0) (2023-09-20) - ### Features -* slightly improve Multi-Airdrop UI ([c5252bb](https://github.com/LedgityLabs/LedgityYield/commit/c5252bbe443df9a2b0ab86408d6749ce4a9bcaed)) +- slightly improve Multi-Airdrop UI ([c5252bb](https://github.com/LedgityLabs/LedgityYield/commit/c5252bbe443df9a2b0ab86408d6749ce4a9bcaed)) ## [1.221.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.221.0...v1.221.1) (2023-09-20) - ### Fixes -* pre-Mining UI max weight was invalid ([ca7358d](https://github.com/LedgityLabs/LedgityYield/commit/ca7358d04d2ea31e048c4b13fbd1cf7efc7c3bb4)) +- pre-Mining UI max weight was invalid ([ca7358d](https://github.com/LedgityLabs/LedgityYield/commit/ca7358d04d2ea31e048c4b13fbd1cf7efc7c3bb4)) ## [1.221.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.220.0...v1.221.0) (2023-09-20) - ### Features -* decrease Galxe and Zealy entries revalidation time ([1850710](https://github.com/LedgityLabs/LedgityYield/commit/1850710ccc1853609fac6553a82dd0072b915f7d)) +- decrease Galxe and Zealy entries revalidation time ([1850710](https://github.com/LedgityLabs/LedgityYield/commit/1850710ccc1853609fac6553a82dd0072b915f7d)) ## [1.220.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.219.0...v1.220.0) (2023-09-20) - ### Features -* update holders count ([f90cd7d](https://github.com/LedgityLabs/LedgityYield/commit/f90cd7de32e41970cc4ce86bac2d4be144ff4340)) +- update holders count ([f90cd7d](https://github.com/LedgityLabs/LedgityYield/commit/f90cd7de32e41970cc4ce86bac2d4be144ff4340)) ## [1.219.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.218.0...v1.219.0) (2023-09-20) - ### Features -* pre-Mining is now available on both Arbitrum and Linea! ([d403d1c](https://github.com/LedgityLabs/LedgityYield/commit/d403d1c3d6484b26f1813894a2532d94e224abe7)) - +- pre-Mining is now available on both Arbitrum and Linea! ([d403d1c](https://github.com/LedgityLabs/LedgityYield/commit/d403d1c3d6484b26f1813894a2532d94e224abe7)) ### Tests -* run Slither analysis on last version of the PreMining contract ([d1b36fe](https://github.com/LedgityLabs/LedgityYield/commit/d1b36fe20023da1f9d3d1cc58bdade8f9a15147c)) +- run Slither analysis on last version of the PreMining contract ([d1b36fe](https://github.com/LedgityLabs/LedgityYield/commit/d1b36fe20023da1f9d3d1cc58bdade8f9a15147c)) ## [1.218.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.217.0...v1.218.0) (2023-09-19) - ### Features -* improve Airdrop and Pre-Mining pages metadata ([a071649](https://github.com/LedgityLabs/LedgityYield/commit/a071649697c99fea5ea8cac5cf9302b91e72261e)) - +- improve Airdrop and Pre-Mining pages metadata ([a071649](https://github.com/LedgityLabs/LedgityYield/commit/a071649697c99fea5ea8cac5cf9302b91e72261e)) ### Others -* **deps:** update dependency postcss to v8.4.30 ([09532d8](https://github.com/LedgityLabs/LedgityYield/commit/09532d8540b5c5043a70a3edf55605acc96212cf)) +- **deps:** update dependency postcss to v8.4.30 ([09532d8](https://github.com/LedgityLabs/LedgityYield/commit/09532d8540b5c5043a70a3edf55605acc96212cf)) ## [1.217.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.216.0...v1.217.0) (2023-09-19) - ### Features -* add metadata title to app pages ([38364cb](https://github.com/LedgityLabs/LedgityYield/commit/38364cb2b822ea2a84657a2c0b10b4dc1eec9f6e)) +- add metadata title to app pages ([38364cb](https://github.com/LedgityLabs/LedgityYield/commit/38364cb2b822ea2a84657a2c0b10b4dc1eec9f6e)) ## [1.216.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.215.4...v1.216.0) (2023-09-19) - ### Features -* update/improved metadata and og-images ([ad5306a](https://github.com/LedgityLabs/LedgityYield/commit/ad5306af9d8db60c09cec12ddd2fccd3205f73fb)) +- update/improved metadata and og-images ([ad5306a](https://github.com/LedgityLabs/LedgityYield/commit/ad5306af9d8db60c09cec12ddd2fccd3205f73fb)) ## [1.215.4](https://github.com/LedgityLabs/LedgityYield/compare/v1.215.3...v1.215.4) (2023-09-19) - ### Fixes -* **deps:** update dependency cookies-next to v4 ([932e450](https://github.com/LedgityLabs/LedgityYield/commit/932e45054ad7886c3a860237b40545e4f2cea2e0)) -* update pre-rendered tabs list ([64b4724](https://github.com/LedgityLabs/LedgityYield/commit/64b4724810e58b7eb6e3ceaff1fd05ff390c817e)) - +- **deps:** update dependency cookies-next to v4 ([932e450](https://github.com/LedgityLabs/LedgityYield/commit/932e45054ad7886c3a860237b40545e4f2cea2e0)) +- update pre-rendered tabs list ([64b4724](https://github.com/LedgityLabs/LedgityYield/commit/64b4724810e58b7eb6e3ceaff1fd05ff390c817e)) ### Others -* **deps:** update actions/checkout action to v4 ([f5e54cf](https://github.com/LedgityLabs/LedgityYield/commit/f5e54cfe9a34ba37959cbfb364ddd5bf6a772965)) -* **deps:** update dependency @types/node to v20.6.2 ([90eb3d6](https://github.com/LedgityLabs/LedgityYield/commit/90eb3d663bafdd38637502b620f6b02ddb5313e7)) -* **deps:** update dependency @types/react to v18.2.22 ([f6f2eb9](https://github.com/LedgityLabs/LedgityYield/commit/f6f2eb948a9f36193d089053d210a171aca23829)) -* **deps:** update dependency eslint to v8.49.0 ([d9c133a](https://github.com/LedgityLabs/LedgityYield/commit/d9c133a089c6626610b4ae0a8945130eec9727ea)) -* **deps:** update dependency semantic-release to v22 ([2ec7376](https://github.com/LedgityLabs/LedgityYield/commit/2ec7376a906fab09c2359d0ff7e8606ece0f9bb4)) +- **deps:** update actions/checkout action to v4 ([f5e54cf](https://github.com/LedgityLabs/LedgityYield/commit/f5e54cfe9a34ba37959cbfb364ddd5bf6a772965)) +- **deps:** update dependency @types/node to v20.6.2 ([90eb3d6](https://github.com/LedgityLabs/LedgityYield/commit/90eb3d663bafdd38637502b620f6b02ddb5313e7)) +- **deps:** update dependency @types/react to v18.2.22 ([f6f2eb9](https://github.com/LedgityLabs/LedgityYield/commit/f6f2eb948a9f36193d089053d210a171aca23829)) +- **deps:** update dependency eslint to v8.49.0 ([d9c133a](https://github.com/LedgityLabs/LedgityYield/commit/d9c133a089c6626610b4ae0a8945130eec9727ea)) +- **deps:** update dependency semantic-release to v22 ([2ec7376](https://github.com/LedgityLabs/LedgityYield/commit/2ec7376a906fab09c2359d0ff7e8606ece0f9bb4)) ## [1.215.3](https://github.com/LedgityLabs/LedgityYield/compare/v1.215.2...v1.215.3) (2023-09-19) - ### Fixes -* remove old QuestN endpoint ([10584fe](https://github.com/LedgityLabs/LedgityYield/commit/10584fe538223d9ae7497794004947b4554aa905)) +- remove old QuestN endpoint ([10584fe](https://github.com/LedgityLabs/LedgityYield/commit/10584fe538223d9ae7497794004947b4554aa905)) ## [1.215.2](https://github.com/LedgityLabs/LedgityYield/compare/v1.215.1...v1.215.2) (2023-09-19) - ### Fixes -* typescript error ([aea5559](https://github.com/LedgityLabs/LedgityYield/commit/aea555955ca13946cb2b85f82f05239615943859)) +- typescript error ([aea5559](https://github.com/LedgityLabs/LedgityYield/commit/aea555955ca13946cb2b85f82f05239615943859)) ## [1.215.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.215.0...v1.215.1) (2023-09-19) - ### Fixes -* **deps:** upgrade dependencies ([1b90a2f](https://github.com/LedgityLabs/LedgityYield/commit/1b90a2f248d5e12597b8ffff3d534f697fd4c650)) +- **deps:** upgrade dependencies ([1b90a2f](https://github.com/LedgityLabs/LedgityYield/commit/1b90a2f248d5e12597b8ffff3d534f697fd4c650)) ## [1.215.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.214.1...v1.215.0) (2023-09-19) - ### Features -* multi-Airdrop + Pre-Mining campaigns release! ([729d3e9](https://github.com/LedgityLabs/LedgityYield/commit/729d3e9c6769d647080fc21cec14dd73944273de)) +- multi-Airdrop + Pre-Mining campaigns release! ([729d3e9](https://github.com/LedgityLabs/LedgityYield/commit/729d3e9c6769d647080fc21cec14dd73944273de)) ## [1.214.1](https://github.com/LedgityLabs/LedgityYield/compare/v1.214.0...v1.214.1) (2023-09-10) - ### Fixes -* tS deployment error ([52b11a7](https://github.com/LedgityLabs/LedgityYield/commit/52b11a73bfdde0a49e9080a35186a46523450dff)) +- tS deployment error ([52b11a7](https://github.com/LedgityLabs/LedgityYield/commit/52b11a73bfdde0a49e9080a35186a46523450dff)) ## [1.214.0](https://github.com/LedgityLabs/LedgityYield/compare/v1.213.0...v1.214.0) (2023-09-10) diff --git a/components.json b/components.json index e7f53082..5bce35f3 100644 --- a/components.json +++ b/components.json @@ -14,4 +14,4 @@ "components": "@/components", "utils": "@/lib/utils" } -} \ No newline at end of file +} diff --git a/contracts/abis/APRHistory.json b/contracts/abis/APRHistory.json index 296be531..9a4f03a5 100644 --- a/contracts/abis/APRHistory.json +++ b/contracts/abis/APRHistory.json @@ -90,4 +90,4 @@ "stateMutability": "pure", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/BaseUpgradeable.json b/contracts/abis/BaseUpgradeable.json index 0221ec62..fdde240d 100644 --- a/contracts/abis/BaseUpgradeable.json +++ b/contracts/abis/BaseUpgradeable.json @@ -249,4 +249,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/ERC20BaseUpgradeable.json b/contracts/abis/ERC20BaseUpgradeable.json index 121ef393..0f3deebe 100644 --- a/contracts/abis/ERC20BaseUpgradeable.json +++ b/contracts/abis/ERC20BaseUpgradeable.json @@ -519,4 +519,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GenericERC20.json b/contracts/abis/GenericERC20.json index d4aea103..8838283d 100644 --- a/contracts/abis/GenericERC20.json +++ b/contracts/abis/GenericERC20.json @@ -347,4 +347,4 @@ "stateMutability": "nonpayable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GlobalBlacklist.json b/contracts/abis/GlobalBlacklist.json index bd2b512c..cf2b6da1 100644 --- a/contracts/abis/GlobalBlacklist.json +++ b/contracts/abis/GlobalBlacklist.json @@ -255,4 +255,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GlobalOwnableUpgradeable.json b/contracts/abis/GlobalOwnableUpgradeable.json index 5e320c94..6e1a8ca0 100644 --- a/contracts/abis/GlobalOwnableUpgradeable.json +++ b/contracts/abis/GlobalOwnableUpgradeable.json @@ -77,4 +77,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GlobalOwner.json b/contracts/abis/GlobalOwner.json index c16ddd09..34044e46 100644 --- a/contracts/abis/GlobalOwner.json +++ b/contracts/abis/GlobalOwner.json @@ -204,4 +204,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GlobalPausableUpgradeable.json b/contracts/abis/GlobalPausableUpgradeable.json index e2734a54..5cccba98 100644 --- a/contracts/abis/GlobalPausableUpgradeable.json +++ b/contracts/abis/GlobalPausableUpgradeable.json @@ -64,4 +64,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GlobalPause.json b/contracts/abis/GlobalPause.json index ebf35b37..a8cd0d75 100644 --- a/contracts/abis/GlobalPause.json +++ b/contracts/abis/GlobalPause.json @@ -237,4 +237,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/GlobalRestrictableUpgradeable.json b/contracts/abis/GlobalRestrictableUpgradeable.json index 4f7b9224..1920e28f 100644 --- a/contracts/abis/GlobalRestrictableUpgradeable.json +++ b/contracts/abis/GlobalRestrictableUpgradeable.json @@ -25,4 +25,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/ITransfersListener.json b/contracts/abis/ITransfersListener.json index fd9b9cf1..4c1de16a 100644 --- a/contracts/abis/ITransfersListener.json +++ b/contracts/abis/ITransfersListener.json @@ -22,4 +22,4 @@ "stateMutability": "nonpayable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/InvestUpgradeable.json b/contracts/abis/InvestUpgradeable.json index e1eca9a4..c824f762 100644 --- a/contracts/abis/InvestUpgradeable.json +++ b/contracts/abis/InvestUpgradeable.json @@ -380,4 +380,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/LDY.json b/contracts/abis/LDY.json index 9952244f..886fde2a 100644 --- a/contracts/abis/LDY.json +++ b/contracts/abis/LDY.json @@ -305,4 +305,4 @@ "stateMutability": "nonpayable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/LDYStaking.json b/contracts/abis/LDYStaking.json index 43d797d4..7d8ef389 100644 --- a/contracts/abis/LDYStaking.json +++ b/contracts/abis/LDYStaking.json @@ -937,4 +937,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/LToken.json b/contracts/abis/LToken.json index 8413305d..ee4cff08 100644 --- a/contracts/abis/LToken.json +++ b/contracts/abis/LToken.json @@ -1335,4 +1335,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/LTokenSignaler.json b/contracts/abis/LTokenSignaler.json index 6a185dfa..d2ea4f7c 100644 --- a/contracts/abis/LTokenSignaler.json +++ b/contracts/abis/LTokenSignaler.json @@ -210,4 +210,4 @@ "stateMutability": "payable", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/PreMining.json b/contracts/abis/PreMining.json index 9ef893e8..37e9bf0d 100644 --- a/contracts/abis/PreMining.json +++ b/contracts/abis/PreMining.json @@ -593,4 +593,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/abis/RecoverableUpgradeable.json b/contracts/abis/RecoverableUpgradeable.json index abbfd744..5f5c2783 100644 --- a/contracts/abis/RecoverableUpgradeable.json +++ b/contracts/abis/RecoverableUpgradeable.json @@ -95,4 +95,4 @@ "stateMutability": "view", "type": "function" } -] \ No newline at end of file +] diff --git a/contracts/dependencies.json b/contracts/dependencies.json index 7a65a380..703a2be4 100644 --- a/contracts/dependencies.json +++ b/contracts/dependencies.json @@ -16,4 +16,4 @@ "421614": "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d", "11155111": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" } -} \ No newline at end of file +} diff --git a/contracts/deployments.json b/contracts/deployments.json index 520d9dc4..fa5a298c 100644 --- a/contracts/deployments.json +++ b/contracts/deployments.json @@ -62449,4 +62449,4 @@ } } ] -} \ No newline at end of file +} diff --git a/contracts/dev/LToken-before-Aug-22-upgrade.sol b/contracts/dev/LToken-before-Aug-22-upgrade.sol index c3323f13..6537b285 100644 --- a/contracts/dev/LToken-before-Aug-22-upgrade.sol +++ b/contracts/dev/LToken-before-Aug-22-upgrade.sol @@ -2,19 +2,19 @@ pragma solidity ^0.8.18; // Contracts -import {ERC20WrapperUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20WrapperUpgradeable.sol"; +import { ERC20WrapperUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20WrapperUpgradeable.sol"; import "../src/abstracts/base/ERC20BaseUpgradeable.sol"; -import {InvestUpgradeable} from "../src/abstracts/InvestUpgradeable.sol"; -import {LDYStaking} from "../src/DummyLDYStaking.sol"; +import { InvestUpgradeable } from "../src/abstracts/InvestUpgradeable.sol"; +import { LDYStaking } from "../src/DummyLDYStaking.sol"; // Libraries -import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; -import {SUD} from "../src/libs/SUD.sol"; +import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import { SUD } from "../src/libs/SUD.sol"; // Interfaces -import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; -import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; -import {ITransfersListener} from "../src/interfaces/ITransfersListener.sol"; +import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import { IERC20MetadataUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; +import { ITransfersListener } from "../src/interfaces/ITransfersListener.sol"; /** * @title LToken @@ -53,923 +53,1024 @@ import {ITransfersListener} from "../src/interfaces/ITransfersListener.sol"; * @custom:oz-upgrades-unsafe-allow external-library-linking * @custom:security-contact security@ledgity.com */ -contract OldLToken1 is ERC20BaseUpgradeable, InvestUpgradeable, ERC20WrapperUpgradeable { - using SafeERC20Upgradeable for IERC20Upgradeable; - - /// @dev Represents type of actions triggering ActivityEvent events. - enum Action { - Deposit, - Withdraw - } - - /// @dev Represents different status of actions triggering ActivityEvent events. - enum Status { - Queued, - Cancelled, - Success - } - - /** - * @notice Represents a withdrawal request in the queue. - * @dev A request fits in a single storage slot (32 bytes). - * @param account The account that initiated the request. - * @param amount The amount of underlying tokens requested. - */ - struct WithdrawalRequest { - address account; // 20 bytes - uint96 amount; // 12 bytes - } - - /// @notice Upper limit of retention rate. - uint32 private constant MAX_RETENTION_RATE_UD7x3 = 10 * 10 ** 3; // 10% - - /// @notice Used in activity events to represent the absence of request ID. - int256 private constant NO_ID = -1; - - /// @notice Holds a reference to the LDYStaking contract. - LDYStaking public ldyStaking; - - /// @notice Holds address of withdrawer wallet (managed by withdrawal server). - address payable public withdrawer; - - /// @notice Holds address of fund wallet (managed by Ledgity financial team). - address public fund; - - /// @notice Holds the withdrawal fees rate in UD7x3 format (e.g., 350 = 0.350%). - uint32 public feesRateUD7x3; - - /// @notice Holds the retention rate in UD7x3 format. - uint32 public retentionRateUD7x3; - - /// @notice Holds the amount of withdrawal fees not yet claimed by contract's owner. - uint256 public unclaimedFees; - - /// @notice Holds the amount of L-Tokens currently in the withdrawal queue. - uint256 public totalQueued; - - /** - * @notice Holds the amount of underlying tokens considered as usable by the contract. - * @dev Are usable, only underlying tokens deposit through deposit() or fund() functions. - */ - uint256 public usableUnderlyings; - - /// @notice Holds an ordered list of active withdrawal requests. - WithdrawalRequest[] public withdrawalQueue; - - /// @notice Holds the index of the next withdrawal request to process in the queue. - uint256 public withdrawalQueueCursor; - - /** - * @notice Holds a list of all currently frozen withdrawal requests. - * @dev If a request emitter as been blacklisted, its request is moved here to prevent - * it from blocking the queue. - */ - WithdrawalRequest[] public frozenRequests; - - /** - * @notice Holds a list of contracts' references that are listening to L-Tokens transfers. - * @dev onLTokenTransfer() functions of those contracts will be called on each transfer. - */ - ITransfersListener[] public transfersListeners; - - /** - * @notice Emitted to inform listeners about a change in the contract's TVL. - * @dev TVL = realTotalSupply() - * @param newTVL The new TVL of the contract. - */ - event TVLChangeEvent(uint256 newTVL); - - /** - * @notice Emitted to inform listerners about an activity related to deposits and withdrawals. - * @param id ID of the involved withdrawal request or NO_ID (-1) if not applicable. - * @param account The account involved in the activity. - * @param action The type of activity. - * @param amount The amount of underlying tokens involved in the activity. - * @param newStatus The new status of the activity. - */ - event ActivityEvent( - int256 indexed id, - address indexed account, - Action indexed action, - uint256 amount, - uint256 amountAfterFees, - Status newStatus +contract OldLToken1 is + ERC20BaseUpgradeable, + InvestUpgradeable, + ERC20WrapperUpgradeable +{ + using SafeERC20Upgradeable for IERC20Upgradeable; + + /// @dev Represents type of actions triggering ActivityEvent events. + enum Action { + Deposit, + Withdraw + } + + /// @dev Represents different status of actions triggering ActivityEvent events. + enum Status { + Queued, + Cancelled, + Success + } + + /** + * @notice Represents a withdrawal request in the queue. + * @dev A request fits in a single storage slot (32 bytes). + * @param account The account that initiated the request. + * @param amount The amount of underlying tokens requested. + */ + struct WithdrawalRequest { + address account; // 20 bytes + uint96 amount; // 12 bytes + } + + /// @notice Upper limit of retention rate. + uint32 private constant MAX_RETENTION_RATE_UD7x3 = 10 * 10 ** 3; // 10% + + /// @notice Used in activity events to represent the absence of request ID. + int256 private constant NO_ID = -1; + + /// @notice Holds a reference to the LDYStaking contract. + LDYStaking public ldyStaking; + + /// @notice Holds address of withdrawer wallet (managed by withdrawal server). + address payable public withdrawer; + + /// @notice Holds address of fund wallet (managed by Ledgity financial team). + address public fund; + + /// @notice Holds the withdrawal fees rate in UD7x3 format (e.g., 350 = 0.350%). + uint32 public feesRateUD7x3; + + /// @notice Holds the retention rate in UD7x3 format. + uint32 public retentionRateUD7x3; + + /// @notice Holds the amount of withdrawal fees not yet claimed by contract's owner. + uint256 public unclaimedFees; + + /// @notice Holds the amount of L-Tokens currently in the withdrawal queue. + uint256 public totalQueued; + + /** + * @notice Holds the amount of underlying tokens considered as usable by the contract. + * @dev Are usable, only underlying tokens deposit through deposit() or fund() functions. + */ + uint256 public usableUnderlyings; + + /// @notice Holds an ordered list of active withdrawal requests. + WithdrawalRequest[] public withdrawalQueue; + + /// @notice Holds the index of the next withdrawal request to process in the queue. + uint256 public withdrawalQueueCursor; + + /** + * @notice Holds a list of all currently frozen withdrawal requests. + * @dev If a request emitter as been blacklisted, its request is moved here to prevent + * it from blocking the queue. + */ + WithdrawalRequest[] public frozenRequests; + + /** + * @notice Holds a list of contracts' references that are listening to L-Tokens transfers. + * @dev onLTokenTransfer() functions of those contracts will be called on each transfer. + */ + ITransfersListener[] public transfersListeners; + + /** + * @notice Emitted to inform listeners about a change in the contract's TVL. + * @dev TVL = realTotalSupply() + * @param newTVL The new TVL of the contract. + */ + event TVLChangeEvent(uint256 newTVL); + + /** + * @notice Emitted to inform listerners about an activity related to deposits and withdrawals. + * @param id ID of the involved withdrawal request or NO_ID (-1) if not applicable. + * @param account The account involved in the activity. + * @param action The type of activity. + * @param amount The amount of underlying tokens involved in the activity. + * @param newStatus The new status of the activity. + */ + event ActivityEvent( + int256 indexed id, + address indexed account, + Action indexed action, + uint256 amount, + uint256 amountAfterFees, + Status newStatus + ); + + /** + * @notice Emitted to inform listeners that some rewards have been minted. + * @param account The account that received the rewards. + * @param balanceBefore The balance of the account before the minting. + * @param rewards The amount of minted rewards. + */ + event MintedRewardsEvent( + address indexed account, + uint256 balanceBefore, + uint256 rewards + ); + + /// @notice Reverts if the function caller is not the withdrawer wallet. + modifier onlyWithdrawer() { + require(_msgSender() == withdrawer, "L39"); + _; + } + + /// @notice Reverts if the function caller is not the fund wallet. + modifier onlyFund() { + require(_msgSender() == fund, "L40"); + _; + } + + /** + * @notice Initializer function of the contract. It replaces the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + * @param globalPause_ The address of the GlobalPause contract. + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + * @param underlyingToken The address of the underlying stablecoin ERC20 token. + */ + function initialize( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + address ldyStaking_, + address underlyingToken + ) public initializer { + // Initialize ERC20 base. + string memory underlyingSymbol = IERC20MetadataUpgradeable( + underlyingToken + ).symbol(); + __ERC20Base_init( + globalOwner_, + globalPause_, + globalBlacklist_, + string(abi.encodePacked("Ledgity ", underlyingSymbol)), + string(abi.encodePacked("L", underlyingSymbol)) ); - /** - * @notice Emitted to inform listeners that some rewards have been minted. - * @param account The account that received the rewards. - * @param balanceBefore The balance of the account before the minting. - * @param rewards The amount of minted rewards. - */ - event MintedRewardsEvent(address indexed account, uint256 balanceBefore, uint256 rewards); - - /// @notice Reverts if the function caller is not the withdrawer wallet. - modifier onlyWithdrawer() { - require(_msgSender() == withdrawer, "L39"); - _; - } - - /// @notice Reverts if the function caller is not the fund wallet. - modifier onlyFund() { - require(_msgSender() == fund, "L40"); - _; - } - - /** - * @notice Initializer function of the contract. It replaces the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - * @param globalPause_ The address of the GlobalPause contract. - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - * @param underlyingToken The address of the underlying stablecoin ERC20 token. - */ - function initialize( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - address ldyStaking_, - address underlyingToken - ) public initializer { - // Initialize ERC20 base. - string memory underlyingSymbol = IERC20MetadataUpgradeable(underlyingToken).symbol(); - __ERC20Base_init( - globalOwner_, - globalPause_, - globalBlacklist_, - string(abi.encodePacked("Ledgity ", underlyingSymbol)), - string(abi.encodePacked("L", underlyingSymbol)) - ); - - // IMPORTANT: Below calls must not be restricted to owner at any point. - // This is because the GlobalOwner contract may not be a fresh one, and so - // the contract deployer may not be the owner anymore after ERC20Base init. - - // Initialize other parents contracts. - __ERC20Wrapper_init(IERC20Upgradeable(underlyingToken)); - __Invest_init_unchained(address(this)); - - // Set LDYStaking contract - ldyStaking = LDYStaking(ldyStaking_); - - // Set initial withdrawal fees rate to 0.3% - feesRateUD7x3 = 300; - - // Set initial retention rate to 10% - retentionRateUD7x3 = 10_000; - - // Default withdrawer and fund wallet to contract owner address. This prevents - // any loss of funds if a deposit/withdrawal is made before those are manually set. - withdrawer = payable(owner()); - fund = payable(owner()); - } - - /** - * @notice Required override of decimals() which is implemented by both - * ERC20Upgradeable and ERC20WrapperUpgradeable parent contracts. - * @dev The ERC20WrapperUpgradeable version is preferred because it mirrors the - * decimals amount of the underlying stablecoin token. - * @inheritdoc ERC20WrapperUpgradeable - */ - function decimals() - public - view - override(ERC20Upgradeable, ERC20WrapperUpgradeable) - returns (uint8) - { - return ERC20WrapperUpgradeable.decimals(); - } - - /** - * @notice Required override of paused() which is implemented by both - * GlobalPausableUpgradeable and ERC20BaseUpgradeable parent contracts. - * @dev Both version are the same as ERC20BaseUpgradeable.paused() mirrors - * GlobalPausableUpgradeable.paused(), so a random one is chosen. - * @inheritdoc GlobalPausableUpgradeable - */ - function paused() - public - view - virtual - override(GlobalPausableUpgradeable, ERC20BaseUpgradeable) - returns (bool) - { - return GlobalPausableUpgradeable.paused(); - } - - /** - * @notice Updates the current withdrawal fee rate. - * @param feesRateUD7x3_ The new withdrawal fee rate in UD7x3 format. - */ - function setFeesRate(uint32 feesRateUD7x3_) public onlyOwner { - feesRateUD7x3 = feesRateUD7x3_; - } - - /** - * @notice Updates the current underlying token retention rate. - * @dev The retention rate is capped at 10%, which ensures that no more than 10% of - * deposited assets will ever be exposed in this contract (reduces attack surface). - * @param retentionRateUD7x3_ The new retention rate in UD7x3 format. - */ - function setRetentionRate(uint32 retentionRateUD7x3_) public onlyOwner { - require(retentionRateUD7x3_ <= MAX_RETENTION_RATE_UD7x3, "L41"); - retentionRateUD7x3 = retentionRateUD7x3_; - } - - /** - * @notice Updates the address of LDYStaking contract. - * @param ldyStakingAddress The address of the new LDYStaking contract. - */ - function setLDYStaking(address ldyStakingAddress) public onlyOwner { - ldyStaking = LDYStaking(ldyStakingAddress); - } - - /** - * @notice Updates the address of the withdrawer wallet. - * @param withdrawer_ The address of the new withdrawer wallet. - */ - function setWithdrawer(address payable withdrawer_) public onlyOwner { - // Ensure address is not the zero address (pre-processing fees would be lost else) - require(withdrawer_ != address(0), "L63"); - - // Set new withdrawer wallet's address - withdrawer = withdrawer_; - } - - /** - * @notice Updates the address of the fund wallet. - * @param fund_ The address of the new fund wallet. - */ - function setFund(address payable fund_) public onlyOwner { - // Ensure address is not the zero address (deposited tokens would be lost else) - require(fund_ != address(0), "L64"); - - // Set new fund wallet's address - fund = fund_; - } - - /** - * @notice Adds a new contract to the L-Token transfers list. - * @dev Each time a transfer occurs, the onLTokenTransfer() function of the - * specified contract will be called. - * @dev IMPORTANT SECURITY NOTE: This method is not intended to be used with - * contracts that are not owned by the Ledgity team. - * @param listenerContract The address of the new transfers listener contract. - */ - function listenToTransfers(address listenerContract) public onlyOwner { - transfersListeners.push(ITransfersListener(listenerContract)); - } - - /** - * @notice Removes a contract from the L-Token transfers list. - * @dev The onLTokenTransfer() function of the specified contract will not be called - * anymore each time a L-Token transfer occurs. - * @param listenerContract The address of the listener contract. - */ - function unlistenToTransfers(address listenerContract) public onlyOwner { - // Find index of listener contract in transferListeners array - int256 index = -1; - uint256 transfersListenersLength = transfersListeners.length; - for (uint256 i = 0; i < transfersListenersLength; i++) { - if (address(transfersListeners[i]) == listenerContract) { - index = int256(i); - break; - } - } - - // Revert if given contract wasn't listening to transfers - require(index > -1, "L42"); - - // Else, remove transfers listener contract from listeners array - transfersListeners[uint256(index)] = transfersListeners[transfersListenersLength - 1]; - transfersListeners.pop(); - } - - /** - * @notice Retrieves the amount of given account's not yet minted rewards. - * @dev This is a public implementation of InvestUpgradeable_rewardsOf(). In the - * context of LToken, this function returns the amount of rewards that have not been - * distributed/minted yet to the specified account. - * @dev This is particularly useful for off-chain services to display charts and - * statistics, as seen in the Ledgity Yield's frontend. - * @param account The account to check the unminted rewards of. - * @return The amount of account's unminted rewards. - */ - function unmintedRewardsOf(address account) public view returns (uint256) { - return _rewardsOf(account, true); - } - - /** - * @notice Retrieves the "real" balance of an account, i.e., excluding its not yet - * minted/distributed rewards. - * @param account The account to check the real balance of. - * @return The real balance of the account. - */ - function realBalanceOf(address account) public view returns (uint256) { - return super.balanceOf(account); - } - - /** - * @notice Retrieves the total balance of L-Tokens that belong to the account. - * @dev This is an oOverride of ERC20Upgradeable.balanceOf() that rewards that have - * not been yet minted to the specified account. - * @param account The account to check the total balance of. - * @return The total balance of the account. - */ - function balanceOf(address account) public view override returns (uint256) { - return realBalanceOf(account) + unmintedRewardsOf(account); - } - - /** - * @notice Returns the "real" amount of existing L-Tokens, i.e., excluding not yet - * minted withdrawal fees and L-Tokens currently in the withdrawal queue. - * @return The real total supply of L-Tokens. - */ - function realTotalSupply() public view returns (uint256) { - return super.totalSupply(); - } - - /** - * @notice Retrives the total supply of L-Tokens, including not yet minted withdrawal - * fees and L-Tokens currently in the withdrawal queue. - * @return The total supply of L-Tokens. - */ - function totalSupply() public view override returns (uint256) { - return realTotalSupply() + totalQueued + unclaimedFees; - } - - /** - * @notice Recovers a specified amount of a given token address. - * @dev This override of RecoverableUpgradeable.recoverERC20() prevents the recovered - * token from being the underlying token. - * @inheritdoc RecoverableUpgradeable - */ - function recoverERC20(address tokenAddress, uint256 amount) public override onlyOwner { - // Ensure the token is not the underlying token - require(tokenAddress != address(underlying()), "L43"); - - // Proceed to recovery - super.recoverERC20(tokenAddress, amount); - } - - /** - * @notice Recovers underlying tokens accidentally sent to the contract. - * @dev To prevent owner from being able to drain the contract, this function only - * allows recovering "unusable" underlying tokens, i.e., tokens that have not been - * sent through fund() or deposit() functions. - */ - function recoverUnderlying() external onlyOwner { - // Compute the recoverable amount by taking the difference between the contract's - // balance and the amount of usable underlying tokens - uint256 recoverableAmount = underlying().balanceOf(address(this)) - usableUnderlyings; - - // Revert if there is nothing to recover - require(recoverableAmount > 0, "L44"); - - // Else, proceed to underlying tokens recovery - super.recoverERC20(address(underlying()), recoverableAmount); - } - - /** - * @notice Retrieves the amount of underlying tokens invested by the given account. - * @dev Implementing this function is required by the InvestUpgradeable contract. In - * LToken contract, the investment of an account is equal to its real balance. - * @inheritdoc InvestUpgradeable - */ - function _investmentOf(address account) internal view override returns (uint256) { - return realBalanceOf(account); - } - - /** - * @notice Distributes a specified amount of rewards (in L-Tokens) to a given account. - * @dev Implementing this function is required by the InvestUpgradeable contract so - * it can distribute rewards to accounts before each period reset. - * @dev InvestUpgradeable contract already ensure that amount > 0. - * @inheritdoc InvestUpgradeable - */ - function _distributeRewards(address account, uint256 amount) internal override returns (bool) { - // Inform listeners of the rewards minting - emit MintedRewardsEvent(account, realBalanceOf(account), amount); - - // Mint L-Tokens rewards to account - _mint(account, amount); - - // Return true indicating to InvestUpgradeable that the rewards have been distributed - return true; - } - - /** - * @notice Override of ERC20._beforeTokenTransfer() to integrate with InvestUpgradeable. - * @dev This overriden version ensure that _beforeInvestmentChange() hook is properly - * called each time an account's balance is going to change. - * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are - * already included in ERC20BaseUpgradeable._beforeTokenTransfer(). - * @inheritdoc ERC20BaseUpgradeable - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 amount - ) internal override(ERC20Upgradeable, ERC20BaseUpgradeable) { - ERC20BaseUpgradeable._beforeTokenTransfer(from, to, amount); - - // Invoke _beforeInvestmentChange() hook for non-zero accounts - if (from != address(0)) _beforeInvestmentChange(from, true); - if (to != address(0)) _beforeInvestmentChange(to, true); - } - - /** - * @notice Override of ERC20._afterTokenTransfer() to notify all transfers listeners. - * @dev This overriden version will trigger onLTokenTransfer() functions of all - * transfers listeners. - * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are - * already checked in _beforeTokenTransfer(). - * @inheritdoc ERC20Upgradeable - */ - function _afterTokenTransfer(address from, address to, uint256 amount) internal override { - super._afterTokenTransfer(from, to, amount); - - // If some L-Token have been burned/minted, inform listeners of a TVL change - if (from == address(0) || to == address(0)) emit TVLChangeEvent(totalSupply()); - - // Trigger onLTokenTransfer() functions of all the transfers listeners - for (uint256 i = 0; i < transfersListeners.length; i++) { - transfersListeners[i].onLTokenTransfer(from, to, amount); - } - } - - /** - * @notice Computes the maximum amount of underlying tokens that should be retained - * by the contract (based on retention rate). - * @return amount The expected amount of retained underlying tokens. - */ - function getExpectedRetained() public view returns (uint256 amount) { - // Cache invested token's decimals number - uint256 d = SUD.decimalsOf(address(invested())); - - // Convert totalSupply and retentionRate to SUD - uint256 totalSupplySUD = SUD.fromAmount(totalSupply(), d); - uint256 retentionRateSUD = SUD.fromRate(retentionRateUD7x3, d); - - // Compute and return expected retained amount - uint256 expectedRetainedSUD = (totalSupplySUD * retentionRateSUD) / SUD.fromInt(100, d); - return SUD.toAmount(expectedRetainedSUD, d); - } - - /// @notice Transfers underlying tokens exceeding the retention rate to the fund wallet. - function _transferExceedingToFund() internal { - // Retrieve the expected amount retained - uint256 expectedRetained = getExpectedRetained(); - - // If usable underlyings are less than or equal to expected retained, return - if (usableUnderlyings <= expectedRetained) return; - - // Else, exceeding amount is equal to difference between those values - uint256 exceedingAmount = usableUnderlyings - expectedRetained; - - // Decrease usable underlyings amount accordingly - usableUnderlyings -= exceedingAmount; - - // Transfer the exceeding amount to the fund wallet - underlying().safeTransfer(fund, exceedingAmount); - } - - /** - * @notice Override of ERC20WrapperUpgradeable.withdrawTo() that reverts. - * Use instantWithdrawal() or requestWithdrawal() functions instead. - * @inheritdoc ERC20WrapperUpgradeable - */ - function withdrawTo(address account, uint256 amount) public pure override returns (bool) { - account; // Silence unused variable compiler warning - amount; - revert("L45"); - } - - /** - * @notice Override of ERC20WrapperUpgradeable.depositFor() that reverts. - * Use deposit() function instead. - * @inheritdoc ERC20WrapperUpgradeable - */ - function depositFor(address account, uint256 amount) public pure override returns (bool) { - account; // Silence unused variable compiler warning - amount; - revert("L46"); - } - - /** - * @notice Allows exchanging some underlying tokens for the same amount of L-Tokens. - * @param amount The amount of underlying tokens to deposit. - */ - function deposit(uint256 amount) public whenNotPaused notBlacklisted(_msgSender()) { - // Ensure the account has enough underlying tokens to deposit - require(underlying().balanceOf(_msgSender()) >= amount, "L47"); - - // Update usable underlyings balance accordingly - usableUnderlyings += amount; - - // Inform listeners of the deposit activity event - emit ActivityEvent(NO_ID, _msgSender(), Action.Deposit, amount, amount, Status.Success); - - // Receive underlying tokens and mint L-Tokens to the account in a 1:1 ratio - super.depositFor(_msgSender(), amount); - - // Transfer exceeding underlying tokens to the fund wallet - _transferExceedingToFund(); - } - - /** - * @notice Computes fees and net withdrawn amount for a given account withdrawing a - * given amount. - * @param account The account initiating the withdrawal. - * @param amount The amount of the withdrawal. - */ - function getWithdrawnAmountAndFees( - address account, - uint256 amount - ) public view returns (uint256 withdrawnAmount, uint256 fees) { - // If the account is eligible to staking tier 2, no fees are applied - if (ldyStaking.tierOf(account) >= 2) return (amount, 0); - - // Cache invested token's decimals number - uint256 d = SUD.decimalsOf(address(invested())); - - // Convert amount and fees rate to SUD - uint256 amountSUD = SUD.fromAmount(amount, d); - uint256 feesRateSUD = SUD.fromRate(feesRateUD7x3, d); - - // Compute fees and withdrawn amount (initial amount minus fees) - uint256 feesSUD = (amountSUD * feesRateSUD) / SUD.fromInt(100, d); - fees = SUD.toAmount(feesSUD, d); - withdrawnAmount = amount - fees; + // IMPORTANT: Below calls must not be restricted to owner at any point. + // This is because the GlobalOwner contract may not be a fresh one, and so + // the contract deployer may not be the owner anymore after ERC20Base init. + + // Initialize other parents contracts. + __ERC20Wrapper_init(IERC20Upgradeable(underlyingToken)); + __Invest_init_unchained(address(this)); + + // Set LDYStaking contract + ldyStaking = LDYStaking(ldyStaking_); + + // Set initial withdrawal fees rate to 0.3% + feesRateUD7x3 = 300; + + // Set initial retention rate to 10% + retentionRateUD7x3 = 10_000; + + // Default withdrawer and fund wallet to contract owner address. This prevents + // any loss of funds if a deposit/withdrawal is made before those are manually set. + withdrawer = payable(owner()); + fund = payable(owner()); + } + + /** + * @notice Required override of decimals() which is implemented by both + * ERC20Upgradeable and ERC20WrapperUpgradeable parent contracts. + * @dev The ERC20WrapperUpgradeable version is preferred because it mirrors the + * decimals amount of the underlying stablecoin token. + * @inheritdoc ERC20WrapperUpgradeable + */ + function decimals() + public + view + override(ERC20Upgradeable, ERC20WrapperUpgradeable) + returns (uint8) + { + return ERC20WrapperUpgradeable.decimals(); + } + + /** + * @notice Required override of paused() which is implemented by both + * GlobalPausableUpgradeable and ERC20BaseUpgradeable parent contracts. + * @dev Both version are the same as ERC20BaseUpgradeable.paused() mirrors + * GlobalPausableUpgradeable.paused(), so a random one is chosen. + * @inheritdoc GlobalPausableUpgradeable + */ + function paused() + public + view + virtual + override(GlobalPausableUpgradeable, ERC20BaseUpgradeable) + returns (bool) + { + return GlobalPausableUpgradeable.paused(); + } + + /** + * @notice Updates the current withdrawal fee rate. + * @param feesRateUD7x3_ The new withdrawal fee rate in UD7x3 format. + */ + function setFeesRate(uint32 feesRateUD7x3_) public onlyOwner { + feesRateUD7x3 = feesRateUD7x3_; + } + + /** + * @notice Updates the current underlying token retention rate. + * @dev The retention rate is capped at 10%, which ensures that no more than 10% of + * deposited assets will ever be exposed in this contract (reduces attack surface). + * @param retentionRateUD7x3_ The new retention rate in UD7x3 format. + */ + function setRetentionRate( + uint32 retentionRateUD7x3_ + ) public onlyOwner { + require(retentionRateUD7x3_ <= MAX_RETENTION_RATE_UD7x3, "L41"); + retentionRateUD7x3 = retentionRateUD7x3_; + } + + /** + * @notice Updates the address of LDYStaking contract. + * @param ldyStakingAddress The address of the new LDYStaking contract. + */ + function setLDYStaking(address ldyStakingAddress) public onlyOwner { + ldyStaking = LDYStaking(ldyStakingAddress); + } + + /** + * @notice Updates the address of the withdrawer wallet. + * @param withdrawer_ The address of the new withdrawer wallet. + */ + function setWithdrawer( + address payable withdrawer_ + ) public onlyOwner { + // Ensure address is not the zero address (pre-processing fees would be lost else) + require(withdrawer_ != address(0), "L63"); + + // Set new withdrawer wallet's address + withdrawer = withdrawer_; + } + + /** + * @notice Updates the address of the fund wallet. + * @param fund_ The address of the new fund wallet. + */ + function setFund(address payable fund_) public onlyOwner { + // Ensure address is not the zero address (deposited tokens would be lost else) + require(fund_ != address(0), "L64"); + + // Set new fund wallet's address + fund = fund_; + } + + /** + * @notice Adds a new contract to the L-Token transfers list. + * @dev Each time a transfer occurs, the onLTokenTransfer() function of the + * specified contract will be called. + * @dev IMPORTANT SECURITY NOTE: This method is not intended to be used with + * contracts that are not owned by the Ledgity team. + * @param listenerContract The address of the new transfers listener contract. + */ + function listenToTransfers( + address listenerContract + ) public onlyOwner { + transfersListeners.push(ITransfersListener(listenerContract)); + } + + /** + * @notice Removes a contract from the L-Token transfers list. + * @dev The onLTokenTransfer() function of the specified contract will not be called + * anymore each time a L-Token transfer occurs. + * @param listenerContract The address of the listener contract. + */ + function unlistenToTransfers( + address listenerContract + ) public onlyOwner { + // Find index of listener contract in transferListeners array + int256 index = -1; + uint256 transfersListenersLength = transfersListeners.length; + for (uint256 i = 0; i < transfersListenersLength; i++) { + if (address(transfersListeners[i]) == listenerContract) { + index = int256(i); + break; + } } - /** - * @notice Allows instaneously exchanging a given amount of L-Tokens for the same - * amount of underlying tokens. It will fail if the contract currently doesn't hold - * enough underlying tokens to cover the withdrawal. - * @dev In order to save some gas and time to users, frontends should propose this - * function to users only when it has been verified that it will not revert. They - * should propose the requestWithdrawal() function otherwise. - * @param amount The amount L-Tokens to withdraw. - */ - function instantWithdrawal(uint256 amount) external whenNotPaused notBlacklisted(_msgSender()) { - // Ensure the account has enough L-Tokens to withdraw - require(amount <= balanceOf(_msgSender()), "L48"); - - // Can the contract cover this withdrawal plus all already queued requests? - bool cond1 = totalQueued + amount <= usableUnderlyings; - - // Is caller eligible to staking tier 2 and the contract can cover this withdrawal? - bool cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings; - - // Revert if conditions are not met for the withdrawal to be processed instantaneously - if (!(cond1 || cond2)) revert("L49"); - - // Else, retrieve withdrawal fees and net withdrawn amount - (uint256 withdrawnAmount, uint256 fees) = getWithdrawnAmountAndFees(_msgSender(), amount); - - // Increase unclaimed fees amount accordingly - unclaimedFees += fees; - - // Decrease usable underlyings balance accordingly - usableUnderlyings -= withdrawnAmount; - - // Inform listeners of this instant withdrawal activity event - emit ActivityEvent( - NO_ID, - _msgSender(), - Action.Withdraw, - amount, - withdrawnAmount, - Status.Success - ); - - // Burn withdrawal fees from the account - _burn(_msgSender(), fees); - - // Burn account's withdrawn L-Tokens and transfer to it underlying tokens in a 1:1 ratio - super.withdrawTo(_msgSender(), withdrawnAmount); + // Revert if given contract wasn't listening to transfers + require(index > -1, "L42"); + + // Else, remove transfers listener contract from listeners array + transfersListeners[uint256(index)] = transfersListeners[ + transfersListenersLength - 1 + ]; + transfersListeners.pop(); + } + + /** + * @notice Retrieves the amount of given account's not yet minted rewards. + * @dev This is a public implementation of InvestUpgradeable_rewardsOf(). In the + * context of LToken, this function returns the amount of rewards that have not been + * distributed/minted yet to the specified account. + * @dev This is particularly useful for off-chain services to display charts and + * statistics, as seen in the Ledgity Yield's frontend. + * @param account The account to check the unminted rewards of. + * @return The amount of account's unminted rewards. + */ + function unmintedRewardsOf( + address account + ) public view returns (uint256) { + return _rewardsOf(account, true); + } + + /** + * @notice Retrieves the "real" balance of an account, i.e., excluding its not yet + * minted/distributed rewards. + * @param account The account to check the real balance of. + * @return The real balance of the account. + */ + function realBalanceOf( + address account + ) public view returns (uint256) { + return super.balanceOf(account); + } + + /** + * @notice Retrieves the total balance of L-Tokens that belong to the account. + * @dev This is an oOverride of ERC20Upgradeable.balanceOf() that rewards that have + * not been yet minted to the specified account. + * @param account The account to check the total balance of. + * @return The total balance of the account. + */ + function balanceOf( + address account + ) public view override returns (uint256) { + return realBalanceOf(account) + unmintedRewardsOf(account); + } + + /** + * @notice Returns the "real" amount of existing L-Tokens, i.e., excluding not yet + * minted withdrawal fees and L-Tokens currently in the withdrawal queue. + * @return The real total supply of L-Tokens. + */ + function realTotalSupply() public view returns (uint256) { + return super.totalSupply(); + } + + /** + * @notice Retrives the total supply of L-Tokens, including not yet minted withdrawal + * fees and L-Tokens currently in the withdrawal queue. + * @return The total supply of L-Tokens. + */ + function totalSupply() public view override returns (uint256) { + return realTotalSupply() + totalQueued + unclaimedFees; + } + + /** + * @notice Recovers a specified amount of a given token address. + * @dev This override of RecoverableUpgradeable.recoverERC20() prevents the recovered + * token from being the underlying token. + * @inheritdoc RecoverableUpgradeable + */ + function recoverERC20( + address tokenAddress, + uint256 amount + ) public override onlyOwner { + // Ensure the token is not the underlying token + require(tokenAddress != address(underlying()), "L43"); + + // Proceed to recovery + super.recoverERC20(tokenAddress, amount); + } + + /** + * @notice Recovers underlying tokens accidentally sent to the contract. + * @dev To prevent owner from being able to drain the contract, this function only + * allows recovering "unusable" underlying tokens, i.e., tokens that have not been + * sent through fund() or deposit() functions. + */ + function recoverUnderlying() external onlyOwner { + // Compute the recoverable amount by taking the difference between the contract's + // balance and the amount of usable underlying tokens + uint256 recoverableAmount = underlying().balanceOf( + address(this) + ) - usableUnderlyings; + + // Revert if there is nothing to recover + require(recoverableAmount > 0, "L44"); + + // Else, proceed to underlying tokens recovery + super.recoverERC20(address(underlying()), recoverableAmount); + } + + /** + * @notice Retrieves the amount of underlying tokens invested by the given account. + * @dev Implementing this function is required by the InvestUpgradeable contract. In + * LToken contract, the investment of an account is equal to its real balance. + * @inheritdoc InvestUpgradeable + */ + function _investmentOf( + address account + ) internal view override returns (uint256) { + return realBalanceOf(account); + } + + /** + * @notice Distributes a specified amount of rewards (in L-Tokens) to a given account. + * @dev Implementing this function is required by the InvestUpgradeable contract so + * it can distribute rewards to accounts before each period reset. + * @dev InvestUpgradeable contract already ensure that amount > 0. + * @inheritdoc InvestUpgradeable + */ + function _distributeRewards( + address account, + uint256 amount + ) internal override returns (bool) { + // Inform listeners of the rewards minting + emit MintedRewardsEvent(account, realBalanceOf(account), amount); + + // Mint L-Tokens rewards to account + _mint(account, amount); + + // Return true indicating to InvestUpgradeable that the rewards have been distributed + return true; + } + + /** + * @notice Override of ERC20._beforeTokenTransfer() to integrate with InvestUpgradeable. + * @dev This overriden version ensure that _beforeInvestmentChange() hook is properly + * called each time an account's balance is going to change. + * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are + * already included in ERC20BaseUpgradeable._beforeTokenTransfer(). + * @inheritdoc ERC20BaseUpgradeable + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount + ) internal override(ERC20Upgradeable, ERC20BaseUpgradeable) { + ERC20BaseUpgradeable._beforeTokenTransfer(from, to, amount); + + // Invoke _beforeInvestmentChange() hook for non-zero accounts + if (from != address(0)) _beforeInvestmentChange(from, true); + if (to != address(0)) _beforeInvestmentChange(to, true); + } + + /** + * @notice Override of ERC20._afterTokenTransfer() to notify all transfers listeners. + * @dev This overriden version will trigger onLTokenTransfer() functions of all + * transfers listeners. + * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are + * already checked in _beforeTokenTransfer(). + * @inheritdoc ERC20Upgradeable + */ + function _afterTokenTransfer( + address from, + address to, + uint256 amount + ) internal override { + super._afterTokenTransfer(from, to, amount); + + // If some L-Token have been burned/minted, inform listeners of a TVL change + if (from == address(0) || to == address(0)) + emit TVLChangeEvent(totalSupply()); + + // Trigger onLTokenTransfer() functions of all the transfers listeners + for (uint256 i = 0; i < transfersListeners.length; i++) { + transfersListeners[i].onLTokenTransfer(from, to, amount); } + } + + /** + * @notice Computes the maximum amount of underlying tokens that should be retained + * by the contract (based on retention rate). + * @return amount The expected amount of retained underlying tokens. + */ + function getExpectedRetained() + public + view + returns (uint256 amount) + { + // Cache invested token's decimals number + uint256 d = SUD.decimalsOf(address(invested())); + + // Convert totalSupply and retentionRate to SUD + uint256 totalSupplySUD = SUD.fromAmount(totalSupply(), d); + uint256 retentionRateSUD = SUD.fromRate(retentionRateUD7x3, d); + + // Compute and return expected retained amount + uint256 expectedRetainedSUD = (totalSupplySUD * + retentionRateSUD) / SUD.fromInt(100, d); + return SUD.toAmount(expectedRetainedSUD, d); + } + + /// @notice Transfers underlying tokens exceeding the retention rate to the fund wallet. + function _transferExceedingToFund() internal { + // Retrieve the expected amount retained + uint256 expectedRetained = getExpectedRetained(); + + // If usable underlyings are less than or equal to expected retained, return + if (usableUnderlyings <= expectedRetained) return; + + // Else, exceeding amount is equal to difference between those values + uint256 exceedingAmount = usableUnderlyings - expectedRetained; + + // Decrease usable underlyings amount accordingly + usableUnderlyings -= exceedingAmount; + + // Transfer the exceeding amount to the fund wallet + underlying().safeTransfer(fund, exceedingAmount); + } + + /** + * @notice Override of ERC20WrapperUpgradeable.withdrawTo() that reverts. + * Use instantWithdrawal() or requestWithdrawal() functions instead. + * @inheritdoc ERC20WrapperUpgradeable + */ + function withdrawTo( + address account, + uint256 amount + ) public pure override returns (bool) { + account; // Silence unused variable compiler warning + amount; + revert("L45"); + } + + /** + * @notice Override of ERC20WrapperUpgradeable.depositFor() that reverts. + * Use deposit() function instead. + * @inheritdoc ERC20WrapperUpgradeable + */ + function depositFor( + address account, + uint256 amount + ) public pure override returns (bool) { + account; // Silence unused variable compiler warning + amount; + revert("L46"); + } + + /** + * @notice Allows exchanging some underlying tokens for the same amount of L-Tokens. + * @param amount The amount of underlying tokens to deposit. + */ + function deposit( + uint256 amount + ) public whenNotPaused notBlacklisted(_msgSender()) { + // Ensure the account has enough underlying tokens to deposit + require(underlying().balanceOf(_msgSender()) >= amount, "L47"); + + // Update usable underlyings balance accordingly + usableUnderlyings += amount; + + // Inform listeners of the deposit activity event + emit ActivityEvent( + NO_ID, + _msgSender(), + Action.Deposit, + amount, + amount, + Status.Success + ); - /** - * @notice Allows requesting the exchange of a given amount of L-Tokens for the same - * amount of underlying tokens. The request will be automatically processed later. - * @dev The sender must attach 0.004 ETH to pre-pay the future processing gas fees - * paid by the withdrawer wallet. - * @param amount The amount L-Tokens to withdraw. - */ - function requestWithdrawal( - uint256 amount - ) public payable whenNotPaused notBlacklisted(_msgSender()) { - // Ensure the account has enough L-Tokens to withdraw - require(amount <= balanceOf(_msgSender()), "L53"); - - // Ensure the requested amount doesn't overflow uint96 - require(amount <= type(uint96).max, "L54"); - - // Ensure the sender attached the pre-paid processing gas fees - require(msg.value == 0.004 * 10 ** 18, "L55"); - - // Create withdrawal request data - WithdrawalRequest memory request = WithdrawalRequest({ - account: _msgSender(), - amount: uint96(amount) - }); - - // Will hold the request ID - uint256 requestId; - - // Append request to the withdrawal queue: - // - At the beginning, if account is eligible to staking tier 2 and cursor is not 0 - if (ldyStaking.tierOf(_msgSender()) >= 2 && withdrawalQueueCursor > 0) { - withdrawalQueueCursor--; - requestId = withdrawalQueueCursor; - withdrawalQueue[requestId] = request; - } - // - At the end else - else { - withdrawalQueue.push(request); - requestId = withdrawalQueue.length - 1; - } - - // Increase total amount queued accordingly - totalQueued += amount; - - // Inform listeners of this new queued withdrawal activity event - emit ActivityEvent( - int256(requestId), - _msgSender(), - Action.Withdraw, - amount, - amount, - Status.Queued - ); - - // Burn withdrawal L-Tokens amount from account's balance - _burn(_msgSender(), amount); + // Receive underlying tokens and mint L-Tokens to the account in a 1:1 ratio + super.depositFor(_msgSender(), amount); + + // Transfer exceeding underlying tokens to the fund wallet + _transferExceedingToFund(); + } + + /** + * @notice Computes fees and net withdrawn amount for a given account withdrawing a + * given amount. + * @param account The account initiating the withdrawal. + * @param amount The amount of the withdrawal. + */ + function getWithdrawnAmountAndFees( + address account, + uint256 amount + ) public view returns (uint256 withdrawnAmount, uint256 fees) { + // If the account is eligible to staking tier 2, no fees are applied + if (ldyStaking.tierOf(account) >= 2) return (amount, 0); + + // Cache invested token's decimals number + uint256 d = SUD.decimalsOf(address(invested())); + + // Convert amount and fees rate to SUD + uint256 amountSUD = SUD.fromAmount(amount, d); + uint256 feesRateSUD = SUD.fromRate(feesRateUD7x3, d); + + // Compute fees and withdrawn amount (initial amount minus fees) + uint256 feesSUD = (amountSUD * feesRateSUD) / SUD.fromInt(100, d); + fees = SUD.toAmount(feesSUD, d); + withdrawnAmount = amount - fees; + } + + /** + * @notice Allows instaneously exchanging a given amount of L-Tokens for the same + * amount of underlying tokens. It will fail if the contract currently doesn't hold + * enough underlying tokens to cover the withdrawal. + * @dev In order to save some gas and time to users, frontends should propose this + * function to users only when it has been verified that it will not revert. They + * should propose the requestWithdrawal() function otherwise. + * @param amount The amount L-Tokens to withdraw. + */ + function instantWithdrawal( + uint256 amount + ) external whenNotPaused notBlacklisted(_msgSender()) { + // Ensure the account has enough L-Tokens to withdraw + require(amount <= balanceOf(_msgSender()), "L48"); + + // Can the contract cover this withdrawal plus all already queued requests? + bool cond1 = totalQueued + amount <= usableUnderlyings; + + // Is caller eligible to staking tier 2 and the contract can cover this withdrawal? + bool cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && + amount <= usableUnderlyings; + + // Revert if conditions are not met for the withdrawal to be processed instantaneously + if (!(cond1 || cond2)) revert("L49"); + + // Else, retrieve withdrawal fees and net withdrawn amount + ( + uint256 withdrawnAmount, + uint256 fees + ) = getWithdrawnAmountAndFees(_msgSender(), amount); + + // Increase unclaimed fees amount accordingly + unclaimedFees += fees; + + // Decrease usable underlyings balance accordingly + usableUnderlyings -= withdrawnAmount; + + // Inform listeners of this instant withdrawal activity event + emit ActivityEvent( + NO_ID, + _msgSender(), + Action.Withdraw, + amount, + withdrawnAmount, + Status.Success + ); - // Forward pre-paid processing gas fees to the withdrawer wallet - (bool sent, ) = withdrawer.call{value: msg.value}(""); - require(sent, "L56"); + // Burn withdrawal fees from the account + _burn(_msgSender(), fees); + + // Burn account's withdrawn L-Tokens and transfer to it underlying tokens in a 1:1 ratio + super.withdrawTo(_msgSender(), withdrawnAmount); + } + + /** + * @notice Allows requesting the exchange of a given amount of L-Tokens for the same + * amount of underlying tokens. The request will be automatically processed later. + * @dev The sender must attach 0.004 ETH to pre-pay the future processing gas fees + * paid by the withdrawer wallet. + * @param amount The amount L-Tokens to withdraw. + */ + function requestWithdrawal( + uint256 amount + ) public payable whenNotPaused notBlacklisted(_msgSender()) { + // Ensure the account has enough L-Tokens to withdraw + require(amount <= balanceOf(_msgSender()), "L53"); + + // Ensure the requested amount doesn't overflow uint96 + require(amount <= type(uint96).max, "L54"); + + // Ensure the sender attached the pre-paid processing gas fees + require(msg.value == 0.004 * 10 ** 18, "L55"); + + // Create withdrawal request data + WithdrawalRequest memory request = WithdrawalRequest({ + account: _msgSender(), + amount: uint96(amount) + }); + + // Will hold the request ID + uint256 requestId; + + // Append request to the withdrawal queue: + // - At the beginning, if account is eligible to staking tier 2 and cursor is not 0 + if ( + ldyStaking.tierOf(_msgSender()) >= 2 && + withdrawalQueueCursor > 0 + ) { + withdrawalQueueCursor--; + requestId = withdrawalQueueCursor; + withdrawalQueue[requestId] = request; } - - /** - * @notice Processes queued withdrawal requests until there is else no more requests, - * else not enough underlying tokens to continue. - * @dev For further details, see "LToken > Withdrawals" section of whitepaper. - */ - function processQueuedRequests() external onlyWithdrawer whenNotPaused { - // Accumulators variables, will be written on-chain after the loop - uint256 cumulatedFees = 0; - uint256 cumulatedWithdrawnAmount = 0; - uint256 nextRequestId = withdrawalQueueCursor; - - // Cache queue length to avoid multiple SLOADs and avoid infinite loop as big - // requests are increasing the queue length when moved at the end of the queue. - uint256 queueLength = withdrawalQueue.length; - - // Iterate over requests to be processed - while (nextRequestId < queueLength) { - // Stop processing requests if there is not enough gas left to continue the - // loop and properly end the function call. This prevents an attacker from - // blocking the withdrawal processing by creating a ton of tiny requests so - // this function call cannot fit anymore in block gas limit. - if (gasleft() < 45000) break; - - // Retrieve request data - WithdrawalRequest memory request = withdrawalQueue[nextRequestId]; - - // Skip empty request (processed big requests or cancelled requests) - if (request.account == address(0)) {} - // - // If account has been blacklisted since request emission - else if (isBlacklisted(request.account)) { - // Remove request from queue - delete withdrawalQueue[nextRequestId]; - - // Append request in the frozen requests list - frozenRequests.push(request); - } - // - // Or if request is a big request, move it at the end of the queue for now. - // This request will be processed manually later using processBigQueuedRequest() - else if (request.amount > getExpectedRetained() / 2) { - // Remove request from queue - delete withdrawalQueue[nextRequestId]; - - // Append request at the end of the queue - withdrawalQueue.push(request); - } - // - // Else, continue request processing - else { - // Retrieve withdrawal fees and net withdrawn amount - (uint256 withdrawnAmount, uint256 fees) = getWithdrawnAmountAndFees( - request.account, - request.amount - ); - - // Break if the contract doesn't hold enough funds to cover the request - if (withdrawnAmount > usableUnderlyings - cumulatedWithdrawnAmount) break; - - // Accumulate fees and withdrawn amount - cumulatedFees += fees; - cumulatedWithdrawnAmount += withdrawnAmount; - - // Inform listeners of this queued withdrawal processing activity event - emit ActivityEvent( - int256(nextRequestId), - request.account, - Action.Withdraw, - request.amount, - withdrawnAmount, - Status.Success - ); - - // Remove request from queue - delete withdrawalQueue[nextRequestId]; - - // Transfer underlying tokens to account. Burning L-Tokens is not required - // as equestWithdrawal() already did it. - // Security note: Re-entrancy warning are disabled as the request has - // just been deleted from the queue, it will so be skipped if trying to - // process it again. - // slither-disable-next-line reentrancy-no-eth - underlying().safeTransfer(request.account, withdrawnAmount); - } - - // Increment next request ID - nextRequestId++; - } - - // Increase unclaimed fees by the amount of cumulated fees - unclaimedFees += cumulatedFees; - - // Decrease usable underlyings by the cumulated amount of withdrawn underlyings - usableUnderlyings -= cumulatedWithdrawnAmount; - - // Decrease total amount queued by the cumulated amount requested - totalQueued -= cumulatedWithdrawnAmount + cumulatedFees; - - // Update new queue cursor - withdrawalQueueCursor = nextRequestId; - - // Retention rate cannot exceeds as the withdrawal decreases both usable - // underlyings and expected retained amounts by the same number and as the - // expected retained amount is a subset of usable underlyings amount. + // - At the end else + else { + withdrawalQueue.push(request); + requestId = withdrawalQueue.length - 1; } - /** - * @notice Processes a given queued big withdrawal request (one that exceeds half of - * the retention rate). - * @dev In contrast to non-big requests processing, this function will uses to fund - * wallet's balance to fill the request. This allows processing requests that are - * greater than retention rate without having to exceed this rate on the contract. - * @param requestId The ID of the big request to process. - */ - function processBigQueuedRequest(uint256 requestId) external onlyFund whenNotPaused { - // Retrieve request data - WithdrawalRequest memory request = withdrawalQueue[requestId]; - - // Ensure the request is active - require(request.account != address(0), "L66"); - - // Ensure the request emitter has not been blacklisted since request emission - require(!isBlacklisted(request.account), "L50"); - - // Ensure this is indeed a big request - require(request.amount > getExpectedRetained() / 2, "L51"); + // Increase total amount queued accordingly + totalQueued += amount; + + // Inform listeners of this new queued withdrawal activity event + emit ActivityEvent( + int256(requestId), + _msgSender(), + Action.Withdraw, + amount, + amount, + Status.Queued + ); + // Burn withdrawal L-Tokens amount from account's balance + _burn(_msgSender(), amount); + + // Forward pre-paid processing gas fees to the withdrawer wallet + (bool sent, ) = withdrawer.call{ value: msg.value }(""); + require(sent, "L56"); + } + + /** + * @notice Processes queued withdrawal requests until there is else no more requests, + * else not enough underlying tokens to continue. + * @dev For further details, see "LToken > Withdrawals" section of whitepaper. + */ + function processQueuedRequests() + external + onlyWithdrawer + whenNotPaused + { + // Accumulators variables, will be written on-chain after the loop + uint256 cumulatedFees = 0; + uint256 cumulatedWithdrawnAmount = 0; + uint256 nextRequestId = withdrawalQueueCursor; + + // Cache queue length to avoid multiple SLOADs and avoid infinite loop as big + // requests are increasing the queue length when moved at the end of the queue. + uint256 queueLength = withdrawalQueue.length; + + // Iterate over requests to be processed + while (nextRequestId < queueLength) { + // Stop processing requests if there is not enough gas left to continue the + // loop and properly end the function call. This prevents an attacker from + // blocking the withdrawal processing by creating a ton of tiny requests so + // this function call cannot fit anymore in block gas limit. + if (gasleft() < 45000) break; + + // Retrieve request data + WithdrawalRequest memory request = withdrawalQueue[ + nextRequestId + ]; + + // Skip empty request (processed big requests or cancelled requests) + if (request.account == address(0)) {} + // + // If account has been blacklisted since request emission + else if (isBlacklisted(request.account)) { + // Remove request from queue + delete withdrawalQueue[nextRequestId]; + + // Append request in the frozen requests list + frozenRequests.push(request); + } + // + // Or if request is a big request, move it at the end of the queue for now. + // This request will be processed manually later using processBigQueuedRequest() + else if (request.amount > getExpectedRetained() / 2) { + // Remove request from queue + delete withdrawalQueue[nextRequestId]; + + // Append request at the end of the queue + withdrawalQueue.push(request); + } + // + // Else, continue request processing + else { // Retrieve withdrawal fees and net withdrawn amount - (uint256 withdrawnAmount, uint256 fees) = getWithdrawnAmountAndFees( + ( + uint256 withdrawnAmount, + uint256 fees + ) = getWithdrawnAmountAndFees( request.account, request.amount - ); - - // Ensure withdrawn amount can be covered by contract + fund wallet balances - uint256 fundBalance = underlying().balanceOf(fund); - require(withdrawnAmount <= usableUnderlyings + fundBalance, "L52"); + ); - // Increase amount of unclaimed fees accordingly - unclaimedFees += fees; + // Break if the contract doesn't hold enough funds to cover the request + if ( + withdrawnAmount > + usableUnderlyings - cumulatedWithdrawnAmount + ) break; - // Decrease total queued amount by request amount - totalQueued -= request.amount; - - // Increment queue cursor if request was the next request to be processed - if (requestId == withdrawalQueueCursor) withdrawalQueueCursor++; + // Accumulate fees and withdrawn amount + cumulatedFees += fees; + cumulatedWithdrawnAmount += withdrawnAmount; // Inform listeners of this queued withdrawal processing activity event emit ActivityEvent( - int256(requestId), - request.account, - Action.Withdraw, - request.amount, - withdrawnAmount, - Status.Success + int256(nextRequestId), + request.account, + Action.Withdraw, + request.amount, + withdrawnAmount, + Status.Success ); // Remove request from queue - delete withdrawalQueue[requestId]; - - // If fund wallet's balance can cover request, rely on it only - if (withdrawnAmount <= fundBalance) { - underlying().safeTransferFrom(_msgSender(), request.account, withdrawnAmount); - } - // Else, cover request from both fund wallet and contract balances - else { - // Compute amount missing from fund wallet to cover request - uint256 missingAmount = withdrawnAmount - fundBalance; - - // Decrease usable amount of underlying tokens accordingly - usableUnderlyings -= missingAmount; - - // Transfer entire fund balance to request's emitter - underlying().safeTransferFrom(_msgSender(), request.account, fundBalance); - - // Transfer missing amount from contract balance to request emitter - underlying().safeTransfer(request.account, missingAmount); - } - - // Transfer exceeding underlying tokens to the fund wallet - _transferExceedingToFund(); + delete withdrawalQueue[nextRequestId]; + + // Transfer underlying tokens to account. Burning L-Tokens is not required + // as equestWithdrawal() already did it. + // Security note: Re-entrancy warning are disabled as the request has + // just been deleted from the queue, it will so be skipped if trying to + // process it again. + // slither-disable-next-line reentrancy-no-eth + underlying().safeTransfer(request.account, withdrawnAmount); + } + + // Increment next request ID + nextRequestId++; } - /** - * @notice Cancels a given withdrawal request. The request emitter receive back its - * L-Tokens and no fees will be charged. - * @param requestId The ID of the withdrawal request to cancel. - */ - function cancelWithdrawalRequest( - uint256 requestId - ) public whenNotPaused notBlacklisted(_msgSender()) { - // Retrieve request data - WithdrawalRequest memory request = withdrawalQueue[requestId]; - - // Ensure request belongs to caller - require(_msgSender() == request.account, "L57"); - - // Decrease total amount queued accordingly - totalQueued -= request.amount; + // Increase unclaimed fees by the amount of cumulated fees + unclaimedFees += cumulatedFees; + + // Decrease usable underlyings by the cumulated amount of withdrawn underlyings + usableUnderlyings -= cumulatedWithdrawnAmount; + + // Decrease total amount queued by the cumulated amount requested + totalQueued -= cumulatedWithdrawnAmount + cumulatedFees; + + // Update new queue cursor + withdrawalQueueCursor = nextRequestId; + + // Retention rate cannot exceeds as the withdrawal decreases both usable + // underlyings and expected retained amounts by the same number and as the + // expected retained amount is a subset of usable underlyings amount. + } + + /** + * @notice Processes a given queued big withdrawal request (one that exceeds half of + * the retention rate). + * @dev In contrast to non-big requests processing, this function will uses to fund + * wallet's balance to fill the request. This allows processing requests that are + * greater than retention rate without having to exceed this rate on the contract. + * @param requestId The ID of the big request to process. + */ + function processBigQueuedRequest( + uint256 requestId + ) external onlyFund whenNotPaused { + // Retrieve request data + WithdrawalRequest memory request = withdrawalQueue[requestId]; + + // Ensure the request is active + require(request.account != address(0), "L66"); + + // Ensure the request emitter has not been blacklisted since request emission + require(!isBlacklisted(request.account), "L50"); + + // Ensure this is indeed a big request + require(request.amount > getExpectedRetained() / 2, "L51"); + + // Retrieve withdrawal fees and net withdrawn amount + ( + uint256 withdrawnAmount, + uint256 fees + ) = getWithdrawnAmountAndFees(request.account, request.amount); + + // Ensure withdrawn amount can be covered by contract + fund wallet balances + uint256 fundBalance = underlying().balanceOf(fund); + require( + withdrawnAmount <= usableUnderlyings + fundBalance, + "L52" + ); - // Delete the withdrawal request from queue - delete withdrawalQueue[requestId]; + // Increase amount of unclaimed fees accordingly + unclaimedFees += fees; - // Inform listeners of this cancelled withdrawal request activity event - emit ActivityEvent( - int256(requestId), - request.account, - Action.Withdraw, - request.amount, - request.amount, - Status.Cancelled - ); + // Decrease total queued amount by request amount + totalQueued -= request.amount; - // Mint back L-Tokens to account - _mint(request.account, uint256(request.amount)); - } + // Increment queue cursor if request was the next request to be processed + if (requestId == withdrawalQueueCursor) withdrawalQueueCursor++; - /** - * @notice Used by the fund wallet to repatriate underlying tokens on the contract - * whenever those are required to fulfill some withdrawal requests. - * @dev The function will revert if repatriated amount makes the contract exceeding - * the retention rate. - * @param amount The amount of underlying tokens to repatriate. - */ - function repatriate(uint256 amount) external onlyFund whenNotPaused { - // Ensure the fund wallet has enough funds to repatriate - require(amount <= underlying().balanceOf(fund), "L58"); + // Inform listeners of this queued withdrawal processing activity event + emit ActivityEvent( + int256(requestId), + request.account, + Action.Withdraw, + request.amount, + withdrawnAmount, + Status.Success + ); - // Calculate new contract usable balance - uint256 newBalance = usableUnderlyings + amount; + // Remove request from queue + delete withdrawalQueue[requestId]; - // Ensure the new balance doesn't exceed the retention rate - require(newBalance <= getExpectedRetained(), "L59"); + // If fund wallet's balance can cover request, rely on it only + if (withdrawnAmount <= fundBalance) { + underlying().safeTransferFrom( + _msgSender(), + request.account, + withdrawnAmount + ); + } + // Else, cover request from both fund wallet and contract balances + else { + // Compute amount missing from fund wallet to cover request + uint256 missingAmount = withdrawnAmount - fundBalance; + + // Decrease usable amount of underlying tokens accordingly + usableUnderlyings -= missingAmount; + + // Transfer entire fund balance to request's emitter + underlying().safeTransferFrom( + _msgSender(), + request.account, + fundBalance + ); + + // Transfer missing amount from contract balance to request emitter + underlying().safeTransfer(request.account, missingAmount); + } - // Increase usable underlyings amount by repatriated amount - usableUnderlyings += amount; + // Transfer exceeding underlying tokens to the fund wallet + _transferExceedingToFund(); + } + + /** + * @notice Cancels a given withdrawal request. The request emitter receive back its + * L-Tokens and no fees will be charged. + * @param requestId The ID of the withdrawal request to cancel. + */ + function cancelWithdrawalRequest( + uint256 requestId + ) public whenNotPaused notBlacklisted(_msgSender()) { + // Retrieve request data + WithdrawalRequest memory request = withdrawalQueue[requestId]; + + // Ensure request belongs to caller + require(_msgSender() == request.account, "L57"); + + // Decrease total amount queued accordingly + totalQueued -= request.amount; + + // Delete the withdrawal request from queue + delete withdrawalQueue[requestId]; + + // Inform listeners of this cancelled withdrawal request activity event + emit ActivityEvent( + int256(requestId), + request.account, + Action.Withdraw, + request.amount, + request.amount, + Status.Cancelled + ); - // Transfer amount from fund wallet to contract - underlying().safeTransferFrom(_msgSender(), address(this), amount); - } + // Mint back L-Tokens to account + _mint(request.account, uint256(request.amount)); + } + + /** + * @notice Used by the fund wallet to repatriate underlying tokens on the contract + * whenever those are required to fulfill some withdrawal requests. + * @dev The function will revert if repatriated amount makes the contract exceeding + * the retention rate. + * @param amount The amount of underlying tokens to repatriate. + */ + function repatriate( + uint256 amount + ) external onlyFund whenNotPaused { + // Ensure the fund wallet has enough funds to repatriate + require(amount <= underlying().balanceOf(fund), "L58"); + + // Calculate new contract usable balance + uint256 newBalance = usableUnderlyings + amount; + + // Ensure the new balance doesn't exceed the retention rate + require(newBalance <= getExpectedRetained(), "L59"); + + // Increase usable underlyings amount by repatriated amount + usableUnderlyings += amount; + + // Transfer amount from fund wallet to contract + underlying().safeTransferFrom( + _msgSender(), + address(this), + amount + ); + } - /// @notice Used by owner to claim fees generated from successful withdrawals. - function claimFees() external onlyOwner { - // Ensure there are some fees to claim - require(unclaimedFees > 0, "L60"); + /// @notice Used by owner to claim fees generated from successful withdrawals. + function claimFees() external onlyOwner { + // Ensure there are some fees to claim + require(unclaimedFees > 0, "L60"); - // Ensure the contract holds enough underlying tokens to cover fees - require(usableUnderlyings >= unclaimedFees, "L61"); + // Ensure the contract holds enough underlying tokens to cover fees + require(usableUnderlyings >= unclaimedFees, "L61"); - // Decrease usable underlyings amount accordingly - usableUnderlyings -= unclaimedFees; + // Decrease usable underlyings amount accordingly + usableUnderlyings -= unclaimedFees; - // Store fees amount in memory and reset unclaimed fees amount - uint256 fees = unclaimedFees; - unclaimedFees = 0; + // Store fees amount in memory and reset unclaimed fees amount + uint256 fees = unclaimedFees; + unclaimedFees = 0; - // Transfer unclaimed fees to owner - underlying().safeTransfer(owner(), fees); - } + // Transfer unclaimed fees to owner + underlying().safeTransfer(owner(), fees); + } } diff --git a/contracts/dev/Multicall3.sol b/contracts/dev/Multicall3.sol index 21101703..67596973 100644 --- a/contracts/dev/Multicall3.sol +++ b/contracts/dev/Multicall3.sol @@ -11,228 +11,315 @@ pragma solidity 0.8.18; /// @author Andreas Bigger /// @author Matt Solomon contract Multicall3 { - struct Call { - address target; - bytes callData; - } + struct Call { + address target; + bytes callData; + } - struct Call3 { - address target; - bool allowFailure; - bytes callData; - } + struct Call3 { + address target; + bool allowFailure; + bytes callData; + } - struct Call3Value { - address target; - bool allowFailure; - uint256 value; - bytes callData; - } + struct Call3Value { + address target; + bool allowFailure; + uint256 value; + bytes callData; + } - struct Result { - bool success; - bytes returnData; - } + struct Result { + bool success; + bytes returnData; + } - /// @notice Backwards-compatible call aggregation with Multicall - /// @param calls An array of Call structs - /// @return blockNumber The block number where the calls were executed - /// @return returnData An array of bytes containing the responses - function aggregate( - Call[] calldata calls - ) public payable returns (uint256 blockNumber, bytes[] memory returnData) { - blockNumber = block.number; - uint256 length = calls.length; - returnData = new bytes[](length); - Call calldata call; - for (uint256 i = 0; i < length; ) { - bool success; - call = calls[i]; - (success, returnData[i]) = call.target.call(call.callData); - require(success, "Multicall3: call failed"); - unchecked { - ++i; - } - } + /// @notice Backwards-compatible call aggregation with Multicall + /// @param calls An array of Call structs + /// @return blockNumber The block number where the calls were executed + /// @return returnData An array of bytes containing the responses + function aggregate( + Call[] calldata calls + ) + public + payable + returns (uint256 blockNumber, bytes[] memory returnData) + { + blockNumber = block.number; + uint256 length = calls.length; + returnData = new bytes[](length); + Call calldata call; + for (uint256 i = 0; i < length; ) { + bool success; + call = calls[i]; + (success, returnData[i]) = call.target.call(call.callData); + require(success, "Multicall3: call failed"); + unchecked { + ++i; + } } + } - /// @notice Backwards-compatible with Multicall2 - /// @notice Aggregate calls without requiring success - /// @param requireSuccess If true, require all calls to succeed - /// @param calls An array of Call structs - /// @return returnData An array of Result structs - function tryAggregate( - bool requireSuccess, - Call[] calldata calls - ) public payable returns (Result[] memory returnData) { - uint256 length = calls.length; - returnData = new Result[](length); - Call calldata call; - for (uint256 i = 0; i < length; ) { - Result memory result = returnData[i]; - call = calls[i]; - (result.success, result.returnData) = call.target.call(call.callData); - if (requireSuccess) require(result.success, "Multicall3: call failed"); - unchecked { - ++i; - } - } + /// @notice Backwards-compatible with Multicall2 + /// @notice Aggregate calls without requiring success + /// @param requireSuccess If true, require all calls to succeed + /// @param calls An array of Call structs + /// @return returnData An array of Result structs + function tryAggregate( + bool requireSuccess, + Call[] calldata calls + ) public payable returns (Result[] memory returnData) { + uint256 length = calls.length; + returnData = new Result[](length); + Call calldata call; + for (uint256 i = 0; i < length; ) { + Result memory result = returnData[i]; + call = calls[i]; + (result.success, result.returnData) = call.target.call( + call.callData + ); + if (requireSuccess) + require(result.success, "Multicall3: call failed"); + unchecked { + ++i; + } } + } - /// @notice Backwards-compatible with Multicall2 - /// @notice Aggregate calls and allow failures using tryAggregate - /// @param calls An array of Call structs - /// @return blockNumber The block number where the calls were executed - /// @return blockHash The hash of the block where the calls were executed - /// @return returnData An array of Result structs - function tryBlockAndAggregate( - bool requireSuccess, - Call[] calldata calls - ) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) { - blockNumber = block.number; - blockHash = blockhash(block.number); - returnData = tryAggregate(requireSuccess, calls); - } + /// @notice Backwards-compatible with Multicall2 + /// @notice Aggregate calls and allow failures using tryAggregate + /// @param calls An array of Call structs + /// @return blockNumber The block number where the calls were executed + /// @return blockHash The hash of the block where the calls were executed + /// @return returnData An array of Result structs + function tryBlockAndAggregate( + bool requireSuccess, + Call[] calldata calls + ) + public + payable + returns ( + uint256 blockNumber, + bytes32 blockHash, + Result[] memory returnData + ) + { + blockNumber = block.number; + blockHash = blockhash(block.number); + returnData = tryAggregate(requireSuccess, calls); + } - /// @notice Backwards-compatible with Multicall2 - /// @notice Aggregate calls and allow failures using tryAggregate - /// @param calls An array of Call structs - /// @return blockNumber The block number where the calls were executed - /// @return blockHash The hash of the block where the calls were executed - /// @return returnData An array of Result structs - function blockAndAggregate( - Call[] calldata calls - ) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) { - (blockNumber, blockHash, returnData) = tryBlockAndAggregate(true, calls); - } + /// @notice Backwards-compatible with Multicall2 + /// @notice Aggregate calls and allow failures using tryAggregate + /// @param calls An array of Call structs + /// @return blockNumber The block number where the calls were executed + /// @return blockHash The hash of the block where the calls were executed + /// @return returnData An array of Result structs + function blockAndAggregate( + Call[] calldata calls + ) + public + payable + returns ( + uint256 blockNumber, + bytes32 blockHash, + Result[] memory returnData + ) + { + (blockNumber, blockHash, returnData) = tryBlockAndAggregate( + true, + calls + ); + } - /// @notice Aggregate calls, ensuring each returns success if required - /// @param calls An array of Call3 structs - /// @return returnData An array of Result structs - function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData) { - uint256 length = calls.length; - returnData = new Result[](length); - Call3 calldata calli; - for (uint256 i = 0; i < length; ) { - Result memory result = returnData[i]; - calli = calls[i]; - (result.success, result.returnData) = calli.target.call(calli.callData); - assembly { - // Revert if the call fails and failure is not allowed - // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` - if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { - // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) - mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) - // set data offset - mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) - // set length of revert string - mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) - // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) - mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) - revert(0x00, 0x64) - } - } - unchecked { - ++i; - } + /// @notice Aggregate calls, ensuring each returns success if required + /// @param calls An array of Call3 structs + /// @return returnData An array of Result structs + function aggregate3( + Call3[] calldata calls + ) public payable returns (Result[] memory returnData) { + uint256 length = calls.length; + returnData = new Result[](length); + Call3 calldata calli; + for (uint256 i = 0; i < length; ) { + Result memory result = returnData[i]; + calli = calls[i]; + (result.success, result.returnData) = calli.target.call( + calli.callData + ); + assembly { + // Revert if the call fails and failure is not allowed + // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` + if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { + // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) + mstore( + 0x00, + 0x08c379a000000000000000000000000000000000000000000000000000000000 + ) + // set data offset + mstore( + 0x04, + 0x0000000000000000000000000000000000000000000000000000000000000020 + ) + // set length of revert string + mstore( + 0x24, + 0x0000000000000000000000000000000000000000000000000000000000000017 + ) + // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) + mstore( + 0x44, + 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000 + ) + revert(0x00, 0x64) } + } + unchecked { + ++i; + } } + } - /// @notice Aggregate calls with a msg value - /// @notice Reverts if msg.value is less than the sum of the call values - /// @param calls An array of Call3Value structs - /// @return returnData An array of Result structs - function aggregate3Value( - Call3Value[] calldata calls - ) public payable returns (Result[] memory returnData) { - uint256 valAccumulator; - uint256 length = calls.length; - returnData = new Result[](length); - Call3Value calldata calli; - for (uint256 i = 0; i < length; ) { - Result memory result = returnData[i]; - calli = calls[i]; - uint256 val = calli.value; - // Humanity will be a Type V Kardashev Civilization before this overflows - andreas - // ~ 10^25 Wei in existence << ~ 10^76 size uint fits in a uint256 - unchecked { - valAccumulator += val; - } - (result.success, result.returnData) = calli.target.call{value: val}(calli.callData); - assembly { - // Revert if the call fails and failure is not allowed - // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` - if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { - // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) - mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) - // set data offset - mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) - // set length of revert string - mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) - // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) - mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) - revert(0x00, 0x84) - } - } - unchecked { - ++i; - } + /// @notice Aggregate calls with a msg value + /// @notice Reverts if msg.value is less than the sum of the call values + /// @param calls An array of Call3Value structs + /// @return returnData An array of Result structs + function aggregate3Value( + Call3Value[] calldata calls + ) public payable returns (Result[] memory returnData) { + uint256 valAccumulator; + uint256 length = calls.length; + returnData = new Result[](length); + Call3Value calldata calli; + for (uint256 i = 0; i < length; ) { + Result memory result = returnData[i]; + calli = calls[i]; + uint256 val = calli.value; + // Humanity will be a Type V Kardashev Civilization before this overflows - andreas + // ~ 10^25 Wei in existence << ~ 10^76 size uint fits in a uint256 + unchecked { + valAccumulator += val; + } + (result.success, result.returnData) = calli.target.call{ + value: val + }(calli.callData); + assembly { + // Revert if the call fails and failure is not allowed + // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` + if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { + // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) + mstore( + 0x00, + 0x08c379a000000000000000000000000000000000000000000000000000000000 + ) + // set data offset + mstore( + 0x04, + 0x0000000000000000000000000000000000000000000000000000000000000020 + ) + // set length of revert string + mstore( + 0x24, + 0x0000000000000000000000000000000000000000000000000000000000000017 + ) + // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) + mstore( + 0x44, + 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000 + ) + revert(0x00, 0x84) } - // Finally, make sure the msg.value = SUM(call[0...i].value) - require(msg.value == valAccumulator, "Multicall3: value mismatch"); + } + unchecked { + ++i; + } } + // Finally, make sure the msg.value = SUM(call[0...i].value) + require( + msg.value == valAccumulator, + "Multicall3: value mismatch" + ); + } - /// @notice Returns the block hash for the given block number - /// @param blockNumber The block number - function getBlockHash(uint256 blockNumber) public view returns (bytes32 blockHash) { - blockHash = blockhash(blockNumber); - } + /// @notice Returns the block hash for the given block number + /// @param blockNumber The block number + function getBlockHash( + uint256 blockNumber + ) public view returns (bytes32 blockHash) { + blockHash = blockhash(blockNumber); + } - /// @notice Returns the block number - function getBlockNumber() public view returns (uint256 blockNumber) { - blockNumber = block.number; - } + /// @notice Returns the block number + function getBlockNumber() + public + view + returns (uint256 blockNumber) + { + blockNumber = block.number; + } - /// @notice Returns the block coinbase - function getCurrentBlockCoinbase() public view returns (address coinbase) { - coinbase = block.coinbase; - } + /// @notice Returns the block coinbase + function getCurrentBlockCoinbase() + public + view + returns (address coinbase) + { + coinbase = block.coinbase; + } - /// @notice Returns the block difficulty - function getCurrentBlockDifficulty() public view returns (uint256 difficulty) { - difficulty = block.difficulty; - } + /// @notice Returns the block difficulty + function getCurrentBlockDifficulty() + public + view + returns (uint256 difficulty) + { + difficulty = block.difficulty; + } - /// @notice Returns the block gas limit - function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) { - gaslimit = block.gaslimit; - } + /// @notice Returns the block gas limit + function getCurrentBlockGasLimit() + public + view + returns (uint256 gaslimit) + { + gaslimit = block.gaslimit; + } - /// @notice Returns the block timestamp - function getCurrentBlockTimestamp() public view returns (uint256 timestamp) { - timestamp = block.timestamp; - } + /// @notice Returns the block timestamp + function getCurrentBlockTimestamp() + public + view + returns (uint256 timestamp) + { + timestamp = block.timestamp; + } - /// @notice Returns the (ETH) balance of a given address - function getEthBalance(address addr) public view returns (uint256 balance) { - balance = addr.balance; - } + /// @notice Returns the (ETH) balance of a given address + function getEthBalance( + address addr + ) public view returns (uint256 balance) { + balance = addr.balance; + } - /// @notice Returns the block hash of the last block - function getLastBlockHash() public view returns (bytes32 blockHash) { - unchecked { - blockHash = blockhash(block.number - 1); - } + /// @notice Returns the block hash of the last block + function getLastBlockHash() + public + view + returns (bytes32 blockHash) + { + unchecked { + blockHash = blockhash(block.number - 1); } + } - /// @notice Gets the base fee of the given block - /// @notice Can revert if the BASEFEE opcode is not implemented by the given chain - function getBasefee() public view returns (uint256 basefee) { - basefee = block.basefee; - } + /// @notice Gets the base fee of the given block + /// @notice Can revert if the BASEFEE opcode is not implemented by the given chain + function getBasefee() public view returns (uint256 basefee) { + basefee = block.basefee; + } - /// @notice Returns the chain id - function getChainId() public view returns (uint256 chainid) { - chainid = block.chainid; - } + /// @notice Returns the chain id + function getChainId() public view returns (uint256 chainid) { + chainid = block.chainid; + } } diff --git a/contracts/foundry/test/GlobalBlacklist.t.sol b/contracts/foundry/test/GlobalBlacklist.t.sol index f7cb1030..8c5cfc87 100644 --- a/contracts/foundry/test/GlobalBlacklist.t.sol +++ b/contracts/foundry/test/GlobalBlacklist.t.sol @@ -2,133 +2,145 @@ pragma solidity ^0.8.18; import "../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "./_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "./_helpers/ModifiersExpectations.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalBlacklist} from "../../src/GlobalBlacklist.sol"; -import {GlobalOwner} from "../../src/GlobalOwner.sol"; +import { GlobalBlacklist } from "../../src/GlobalBlacklist.sol"; +import { GlobalOwner } from "../../src/GlobalOwner.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract TestedContract is GlobalBlacklist { - function public_authorizeUpgrade(address newImplementation) public { - _authorizeUpgrade(newImplementation); - } + function public_authorizeUpgrade(address newImplementation) public { + _authorizeUpgrade(newImplementation); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalBlacklist - TestedContract impl2 = new TestedContract(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - tested = TestedContract(address(proxy2)); - tested.initialize(address(globalOwner)); - vm.label(address(tested), "GlobalBlacklist"); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - tested.initialize(address(globalOwner)); - } - - function test_initialize_2() public { - console.log("Should properly set global owner"); - assertEq(tested.globalOwner(), address(globalOwner)); - } - - // ==================================== - // === _authorizeUpgrade() function === - function test_authorizeUpgrade_1() public { - console.log("Should revert if called by non-owner account"); - vm.prank(address(1234)); - expectRevertOnlyOwner(); - tested.public_authorizeUpgrade(address(0)); - } - - // ============================ - // === blacklist() function === - // ======================== - function test_blacklist_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.blacklist(address(4321)); - } - - function test_blacklist_2() public { - console.log("Shouldn't allow blacklisting the zero address"); - - vm.expectRevert(bytes("L20")); - tested.blacklist(address(0)); - } - - function test_blacklist_3() public { - console.log("Should change output of isBlacklisted() for a given address to 'true'"); - - tested.blacklist(address(1234)); - assertEq(tested.isBlacklisted(address(1234)), true); - } - - // ============================== - // === unBlacklist() function === - function test_unBlacklist_1(address account, address blacklistedAccount) public { - console.log("Should revert if not called by owner"); - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.unBlacklist(blacklistedAccount); - } - - function test_unBlacklist_2() public { - console.log("Should change output of isBlacklisted() for a given address to 'false'"); - - tested.blacklist(address(1234)); - assertEq(tested.isBlacklisted(address(1234)), true); - tested.unBlacklist(address(1234)); - assertEq(tested.isBlacklisted(address(1234)), false); - } - - // ================================ - // === isBlacklisted() function === - function invariant_isBlacklisted_1() public { - console.log("Should always return false for zero address"); - assertEq(tested.isBlacklisted(address(0)), false); - } - - function test_isBlacklisted_2(bool blacklisted1, bool blacklisted2) public { - console.log( - "Should return true.false for a given address if the last call on it was respectively blacklist/unBlacklist" - ); - - if (blacklisted1) tested.blacklist(address(1234)); - else tested.unBlacklist(address(1234)); - assertEq(tested.isBlacklisted(address(1234)), blacklisted1); - - if (blacklisted2) tested.blacklist(address(1234)); - else tested.unBlacklist(address(1234)); - assertEq(tested.isBlacklisted(address(1234)), blacklisted2); - } + TestedContract tested; + GlobalOwner globalOwner; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalBlacklist + TestedContract impl2 = new TestedContract(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + tested = TestedContract(address(proxy2)); + tested.initialize(address(globalOwner)); + vm.label(address(tested), "GlobalBlacklist"); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + tested.initialize(address(globalOwner)); + } + + function test_initialize_2() public { + console.log("Should properly set global owner"); + assertEq(tested.globalOwner(), address(globalOwner)); + } + + // ==================================== + // === _authorizeUpgrade() function === + function test_authorizeUpgrade_1() public { + console.log("Should revert if called by non-owner account"); + vm.prank(address(1234)); + expectRevertOnlyOwner(); + tested.public_authorizeUpgrade(address(0)); + } + + // ============================ + // === blacklist() function === + // ======================== + function test_blacklist_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.blacklist(address(4321)); + } + + function test_blacklist_2() public { + console.log("Shouldn't allow blacklisting the zero address"); + + vm.expectRevert(bytes("L20")); + tested.blacklist(address(0)); + } + + function test_blacklist_3() public { + console.log( + "Should change output of isBlacklisted() for a given address to 'true'" + ); + + tested.blacklist(address(1234)); + assertEq(tested.isBlacklisted(address(1234)), true); + } + + // ============================== + // === unBlacklist() function === + function test_unBlacklist_1( + address account, + address blacklistedAccount + ) public { + console.log("Should revert if not called by owner"); + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.unBlacklist(blacklistedAccount); + } + + function test_unBlacklist_2() public { + console.log( + "Should change output of isBlacklisted() for a given address to 'false'" + ); + + tested.blacklist(address(1234)); + assertEq(tested.isBlacklisted(address(1234)), true); + tested.unBlacklist(address(1234)); + assertEq(tested.isBlacklisted(address(1234)), false); + } + + // ================================ + // === isBlacklisted() function === + function invariant_isBlacklisted_1() public { + console.log("Should always return false for zero address"); + assertEq(tested.isBlacklisted(address(0)), false); + } + + function test_isBlacklisted_2( + bool blacklisted1, + bool blacklisted2 + ) public { + console.log( + "Should return true.false for a given address if the last call on it was respectively blacklist/unBlacklist" + ); + + if (blacklisted1) tested.blacklist(address(1234)); + else tested.unBlacklist(address(1234)); + assertEq(tested.isBlacklisted(address(1234)), blacklisted1); + + if (blacklisted2) tested.blacklist(address(1234)); + else tested.unBlacklist(address(1234)); + assertEq(tested.isBlacklisted(address(1234)), blacklisted2); + } } diff --git a/contracts/foundry/test/GlobalOwner.t.sol b/contracts/foundry/test/GlobalOwner.t.sol index fb4f21d1..24602cb1 100644 --- a/contracts/foundry/test/GlobalOwner.t.sol +++ b/contracts/foundry/test/GlobalOwner.t.sol @@ -2,47 +2,49 @@ pragma solidity ^0.8.18; import "../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "./_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "./_helpers/ModifiersExpectations.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalOwner} from "../../src/GlobalOwner.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalOwner } from "../../src/GlobalOwner.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract TestedContract is GlobalOwner { - function public_authorizeUpgrade(address newImplementation) public { - _authorizeUpgrade(newImplementation); - } + function public_authorizeUpgrade(address newImplementation) public { + _authorizeUpgrade(newImplementation); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new TestedContract(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - tested = TestedContract(address(proxy)); - tested.initialize(); - vm.label(address(tested), "GlobalOwner"); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - tested.initialize(); - } - - // ==================================== - // === _authorizeUpgrade() function === - function test_authorizeUpgrade_1() public { - console.log("Should revert if called by non-owner account"); - vm.prank(address(1234)); - expectRevertOnlyOwner(); - tested.public_authorizeUpgrade(address(0)); - } - - // Other functions belong to OpenZeppelin Ownable2StepUpgradeable and are so tested in their repo + TestedContract tested; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new TestedContract(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + tested = TestedContract(address(proxy)); + tested.initialize(); + vm.label(address(tested), "GlobalOwner"); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + tested.initialize(); + } + + // ==================================== + // === _authorizeUpgrade() function === + function test_authorizeUpgrade_1() public { + console.log("Should revert if called by non-owner account"); + vm.prank(address(1234)); + expectRevertOnlyOwner(); + tested.public_authorizeUpgrade(address(0)); + } + + // Other functions belong to OpenZeppelin Ownable2StepUpgradeable and are so tested in their repo } diff --git a/contracts/foundry/test/GlobalPause.t.sol b/contracts/foundry/test/GlobalPause.t.sol index c7ca6694..6cd36f46 100644 --- a/contracts/foundry/test/GlobalPause.t.sol +++ b/contracts/foundry/test/GlobalPause.t.sol @@ -2,106 +2,108 @@ pragma solidity ^0.8.18; import "../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "./_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "./_helpers/ModifiersExpectations.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalPause} from "../../src/GlobalPause.sol"; -import {GlobalOwner} from "../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../src/GlobalPause.sol"; +import { GlobalOwner } from "../../src/GlobalOwner.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract TestedContract is GlobalPause { - function public_authorizeUpgrade(address newImplementation) public { - _authorizeUpgrade(newImplementation); - } + function public_authorizeUpgrade(address newImplementation) public { + _authorizeUpgrade(newImplementation); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - TestedContract impl2 = new TestedContract(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - tested = TestedContract(address(proxy2)); - tested.initialize(address(globalOwner)); - vm.label(address(tested), "GlobalPause"); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - tested.initialize(address(globalOwner)); - } - - function test_initialize_2() public { - console.log("Should properly set global owner"); - assertEq(tested.globalOwner(), address(globalOwner)); - } - - // ==================================== - // === _authorizeUpgrade() function === - function test_authorizeUpgrade_1() public { - console.log("Should revert if called by non-owner account"); - vm.prank(address(1234)); - expectRevertOnlyOwner(); - tested.public_authorizeUpgrade(address(0)); - } - - // ======================== - // === pause() function === - function testFuzz_pause_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.pause(); - } - - function test_pause_2() public { - console.log("Should change output of paused() to 'false' else"); - tested.pause(); - assertEq(tested.paused(), true); - } - - // ========================== - // === unpause() function === - function testFuzz_unpause_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.unpause(); - } - - function test_unpause_2() public { - console.log("Should change output of paused() to 'false' else"); - - tested.pause(); - assertEq(tested.paused(), true); - tested.unpause(); - assertEq(tested.paused(), false); - } - - // Other functions belong to OpenZeppelin PausableUpgradeable and are so tested in their repo + TestedContract tested; + GlobalOwner globalOwner; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + TestedContract impl2 = new TestedContract(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + tested = TestedContract(address(proxy2)); + tested.initialize(address(globalOwner)); + vm.label(address(tested), "GlobalPause"); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + tested.initialize(address(globalOwner)); + } + + function test_initialize_2() public { + console.log("Should properly set global owner"); + assertEq(tested.globalOwner(), address(globalOwner)); + } + + // ==================================== + // === _authorizeUpgrade() function === + function test_authorizeUpgrade_1() public { + console.log("Should revert if called by non-owner account"); + vm.prank(address(1234)); + expectRevertOnlyOwner(); + tested.public_authorizeUpgrade(address(0)); + } + + // ======================== + // === pause() function === + function testFuzz_pause_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.pause(); + } + + function test_pause_2() public { + console.log("Should change output of paused() to 'false' else"); + tested.pause(); + assertEq(tested.paused(), true); + } + + // ========================== + // === unpause() function === + function testFuzz_unpause_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.unpause(); + } + + function test_unpause_2() public { + console.log("Should change output of paused() to 'false' else"); + + tested.pause(); + assertEq(tested.paused(), true); + tested.unpause(); + assertEq(tested.paused(), false); + } + + // Other functions belong to OpenZeppelin PausableUpgradeable and are so tested in their repo } diff --git a/contracts/foundry/test/LDY.t.sol b/contracts/foundry/test/LDY.t.sol index f409efaf..4a5f2e65 100644 --- a/contracts/foundry/test/LDY.t.sol +++ b/contracts/foundry/test/LDY.t.sol @@ -2,49 +2,49 @@ pragma solidity ^0.8.18; import "../lib/forge-std/src/Test.sol"; -import {LDY} from "../../src/LDY.sol"; +import { LDY } from "../../src/LDY.sol"; contract Tests is Test { - LDY tested; - - function setUp() public { - // Deploy LDY contract - tested = new LDY(); - vm.label(address(tested), "LDY"); - } - - // =========================== - // === decimals() function === - function test_decimals_1() public { - console.log("Should return 18"); - assertEq(tested.decimals(), 18); - } - - // ======================= - // === name() function === - function test_name_1() public { - console.log("Should return 'Ledgity Token'"); - assertEq(tested.name(), "Ledgity Token"); - } - - // ========================= - // === symbol() function === - function test_symbol_1() public { - console.log("Should return 'LDY'"); - assertEq(tested.symbol(), "LDY"); - } - - // ============================== - // === totalSupply() function === - function test_totalSupply_1() public { - console.log("Should return 75,000,000 * 10 ** 18"); - assertEq(tested.totalSupply(), 75_000_000 * 10 ** 18); - } - - // ==================== - // === balanceOf() ==== - function test_balanceOf_1() public { - console.log("Should mint 75M LDY to contract deployer"); - assertEq(tested.balanceOf(address(this)), 75_000_000 * 10 ** 18); - } + LDY tested; + + function setUp() public { + // Deploy LDY contract + tested = new LDY(); + vm.label(address(tested), "LDY"); + } + + // =========================== + // === decimals() function === + function test_decimals_1() public { + console.log("Should return 18"); + assertEq(tested.decimals(), 18); + } + + // ======================= + // === name() function === + function test_name_1() public { + console.log("Should return 'Ledgity Token'"); + assertEq(tested.name(), "Ledgity Token"); + } + + // ========================= + // === symbol() function === + function test_symbol_1() public { + console.log("Should return 'LDY'"); + assertEq(tested.symbol(), "LDY"); + } + + // ============================== + // === totalSupply() function === + function test_totalSupply_1() public { + console.log("Should return 75,000,000 * 10 ** 18"); + assertEq(tested.totalSupply(), 75_000_000 * 10 ** 18); + } + + // ==================== + // === balanceOf() ==== + function test_balanceOf_1() public { + console.log("Should mint 75M LDY to contract deployer"); + assertEq(tested.balanceOf(address(this)), 75_000_000 * 10 ** 18); + } } diff --git a/contracts/foundry/test/LDYStaking.t.sol b/contracts/foundry/test/LDYStaking.t.sol index aa60c108..dd92d510 100644 --- a/contracts/foundry/test/LDYStaking.t.sol +++ b/contracts/foundry/test/LDYStaking.t.sol @@ -1,556 +1,636 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; -import {Test, console} from "../lib/forge-std/src/Test.sol"; -import {GenericERC20} from "../../src/GenericERC20.sol"; -import {LDYStaking} from "../../src/LDYStaking.sol"; -import {GlobalOwner} from "../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../src/GlobalPause.sol"; -import {GlobalBlacklist} from "../../src/GlobalBlacklist.sol"; -import {ModifiersExpectations} from "./_helpers/ModifiersExpectations.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { Test, console } from "../lib/forge-std/src/Test.sol"; +import { GenericERC20 } from "../../src/GenericERC20.sol"; +import { LDYStaking } from "../../src/LDYStaking.sol"; +import { GlobalOwner } from "../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../src/GlobalPause.sol"; +import { GlobalBlacklist } from "../../src/GlobalBlacklist.sol"; +import { ModifiersExpectations } from "./_helpers/ModifiersExpectations.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract LDYStakingTest is Test, ModifiersExpectations { - GlobalOwner globalOwner; - GlobalPause globalPause; - GlobalBlacklist globalBlacklist; - - LDYStaking ldyStaking; - GenericERC20 ldyToken; - - uint256 public constant OneMonth = 31 * 24 * 60 * 60; - LDYStaking.StakeDurationInfo[] public stakingDurationInfos; - uint256 public initRewardsDuration = 12 * OneMonth; - uint256 public initRewardsAmount = 1_000_000e18; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - GlobalPause impl2 = new GlobalPause(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - globalPause = GlobalPause(address(proxy2)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - ldyToken = new GenericERC20("Ledgity Token", "LDY", 18); - vm.label(address(ldyToken), "LDY token"); - - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(0 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(1 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(6 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(12 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(24 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(36 * OneMonth, 10000)); - - // Deploy LDYStaking - LDYStaking impl4 = new LDYStaking(); - ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); - ldyStaking = LDYStaking(address(proxy4)); - ldyStaking.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyToken), - stakingDurationInfos, - 12 * OneMonth, - 1000 * 1e18 - ); - - // Set initial rewards amount and duration - ldyStaking.setRewardsDuration(initRewardsDuration); - - deal(address(ldyToken), address(this), initRewardsAmount); - assertEq(ldyToken.balanceOf(address(this)), initRewardsAmount); - ldyToken.approve(address(ldyStaking), initRewardsAmount); - ldyStaking.notifyRewardAmount(initRewardsAmount); - } - - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - ldyStaking.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyToken), - stakingDurationInfos, - 12 * OneMonth, - 1000 * 1e18 - ); - } - - function test_initialize_2() public { - console.log("Should properly set global owner, pause, blacklist and ldy token"); - assertEq(ldyStaking.globalOwner(), address(globalOwner)); - assertEq(ldyStaking.globalPause(), address(globalPause)); - assertEq(ldyStaking.globalBlacklist(), address(globalBlacklist)); - assertEq(address(ldyStaking.stakeRewardToken()), address(ldyToken)); - } - - function test_paused() public { - console.log("Should return state of the global pause contract"); - assertEq(ldyStaking.paused(), false); - - globalPause.pause(); - assertEq(ldyStaking.paused(), true); - - // reverts staking in case of paused status - vm.expectRevert("Pausable: paused"); - ldyStaking.stake(1, 0); - - globalPause.unpause(); - assertEq(ldyStaking.paused(), false); - } - - function test_StakeFailed() public { - vm.expectRevert("amount = 0"); - ldyStaking.stake(0, 0); - - vm.expectRevert("Invalid staking period"); - ldyStaking.stake(1, uint8(stakingDurationInfos.length)); - - vm.expectRevert("ERC20: insufficient allowance"); - ldyStaking.stake(1, 0); - } - - function testFuzz_Stake_LessThanAmountForPerks( - address account, - uint256 amount, - uint8 stakingPeriodIndex - ) public { - vm.assume(account != address(0)); - vm.assume(account != address(ldyToken)); - vm.assume(account != address(ldyStaking)); - vm.assume(amount != 0); - - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1)); - amount = bound(amount, 1, ldyStaking.stakeAmountForPerks() - 1); - - // deposit ldy token into the account - deal(address(ldyToken), account, amount); - - // stake ldy token into the ldyStaking contract - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - - assertEq(ldyStaking.tierOf(account), 0); - } - - function testFuzz_Stake_LessThanDurationForPerks( - address account, - uint256 amount, - uint8 stakingPeriodIndex - ) public { - vm.assume(account != address(0)); - vm.assume(account != address(ldyToken)); - vm.assume(account != address(ldyStaking)); - vm.assume(amount != 0); - - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, 1)); - amount = bound( - amount, - ldyStaking.stakeAmountForPerks(), - 10_000_000 * 10 ** ldyToken.decimals() - ); - - // deposit ldy token into the account - deal(address(ldyToken), account, amount); - - // stake ldy token into the ldyStaking contract - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - - assertEq(ldyStaking.tierOf(account), 0); - } - - function testFuzz_Stake_ElligibleForPerks( - address account, - uint256 amount, - uint8 stakingPeriodIndex - ) public { - vm.assume(account != address(0)); - vm.assume(account != address(ldyToken)); - vm.assume(account != address(ldyStaking)); - vm.assume(amount != 0); - - // stakingPeriodIndex is at least 3(1 year) to satisify perks condition in this case - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 3, stakingDurationInfos.length - 1)); - amount = bound( - amount, - ldyStaking.stakeAmountForPerks(), - 10_000_000 * 10 ** ldyToken.decimals() - ); - - // deposit ldy token into the account - deal(address(ldyToken), account, amount); - - // stake ldy token into the ldyStaking contract - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - assertEq(ldyStaking.tierOf(account), 3); - } - - function testFuzz_StakeToken( - address account1, - address account2, - uint256 amount, - uint8 stakingPeriodIndex - ) public { - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1)); - vm.assume(account1 != address(0)); - vm.assume(account1 != address(ldyToken)); - vm.assume(account1 != address(ldyStaking)); - vm.assume(account2 != address(0)); - vm.assume(account2 != address(ldyToken)); - vm.assume(account2 != address(ldyStaking)); - vm.assume(amount != 0); - - // deposit ldy token into the account - amount = bound(amount, 1, 1_000_000 * 10 ** ldyToken.decimals()); - deal(address(ldyToken), account1, amount); - deal(address(ldyToken), account2, amount); - - // account1 stakes ldy into the ldyStaking contract first time - vm.startPrank(account1); - ldyToken.approve(address(ldyStaking), amount); - // vm.expectEmit(address(ldyStaking)); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - assertEq(ldyStaking.totalStaked(), amount); - - // account1 stakes ldy into the ldyStaking contract again - deal(address(ldyToken), account1, amount); - vm.startPrank(account1); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - assertEq(ldyStaking.totalStaked(), amount * 2); - - LDYStaking.StakingInfo[] memory account1StakingPools = ldyStaking.getUserStakes(account1); - assertEq(account1StakingPools.length, 2); - - // account2 stakes ldy into the ldyStaking contract - vm.startPrank(account2); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - assertEq(ldyStaking.totalStaked(), amount * 3); - - LDYStaking.StakingInfo[] memory account2StakingPools = ldyStaking.getUserStakes(account2); - assertEq(account2StakingPools.length, 1); - } - - function testFuzz_UnstakeFailed_1(uint256 amount, uint256 stakeIndex) public { - vm.assume(amount == 0); - vm.expectRevert("amount = 0"); - ldyStaking.unstake(amount, stakeIndex); - } - - function testFuzz_UnstakeFailed_2( - address account, - uint256 amount, - uint8 stakingPeriodIndex - ) public { - vm.assume(amount != 0); - vm.assume(account != address(0)); - vm.assume(account != address(ldyStaking)); - vm.assume(account != address(ldyToken)); - vm.assume(amount != 0); - amount = bound(amount, 1, 1_000_000 * 10 ** ldyToken.decimals()); - - // stakingPeriodIndex is at least 1 in this case - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 1, stakingDurationInfos.length - 1)); - deal(address(ldyToken), account, amount); - - // stake - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - - // unstake fail - vm.expectRevert("Cannot unstake during staking period"); - vm.prank(account); - ldyStaking.unstake(amount, 0); - - LDYStaking.StakeDurationInfo memory stakeDurationInfo = stakingDurationInfos[ - stakingPeriodIndex - ]; - uint256 skipDuration = stakeDurationInfo.duration; - skip(skipDuration); - - vm.expectRevert("Insufficient unstake amount"); - vm.prank(account); - ldyStaking.unstake(amount + 1, 0); - - vm.expectRevert("Invalid stakeIndex"); - vm.prank(account); - ldyStaking.unstake(amount + 1, 100); - } - - function testFuzz_Unstake_1( - address account1, - uint256 amount1, - uint256 amount2, - uint8 stakingPeriodIndex1, - uint8 stakingPeriodIndex2 - ) public { - vm.assume(account1 != address(0)); - vm.assume(account1 != address(ldyToken)); - vm.assume(account1 != address(ldyStaking)); - vm.assume(amount1 != 0); - vm.assume(amount2 != 0); - - amount1 = bound(amount1, 1, 1_000_000 * 10 ** ldyToken.decimals()); - amount2 = bound(amount1, 1, 1_000_000 * 10 ** ldyToken.decimals()); - stakingPeriodIndex1 = uint8(bound(stakingPeriodIndex1, 0, stakingDurationInfos.length - 1)); - stakingPeriodIndex2 = uint8(bound(stakingPeriodIndex2, 0, stakingDurationInfos.length - 1)); - deal(address(ldyToken), account1, amount1 + amount2); - - // account1 stakes ldy into the ldyStaking contract first time - vm.startPrank(account1); - ldyToken.approve(address(ldyStaking), amount1 + amount2); - ldyStaking.stake(amount1, stakingPeriodIndex1); - - // account1 stakes ldy into the ldyStaking contract again - ldyStaking.stake(amount2, stakingPeriodIndex2); - vm.stopPrank(); - - // check the lenght of earnedArray - uint256[] memory earnedArray = ldyStaking.getEarnedUser(account1); - assertEq(earnedArray.length, 2); - - // account1 unstakes token from staking pool 1 - LDYStaking.StakeDurationInfo memory stakeDurationInfo1 = stakingDurationInfos[ - stakingPeriodIndex1 - ]; - uint256 skipDuration1 = stakeDurationInfo1.duration; - skip(skipDuration1); - vm.startPrank(account1); - uint256 earned1 = ldyStaking.earned(account1, 0); - ldyStaking.unstake(amount1, 0); - vm.stopPrank(); - assertEq(ldyToken.balanceOf(account1), amount1 + earned1); - - // check the lenght of earnedArray - earnedArray = ldyStaking.getEarnedUser(account1); - assertEq(earnedArray.length, 1); - - // account1 unstakes token from staking pool 2 - LDYStaking.StakeDurationInfo memory stakeDurationInfo2 = stakingDurationInfos[ - stakingPeriodIndex2 - ]; - uint256 skipDuration2 = stakeDurationInfo2.duration; - - skip(skipDuration2); - vm.startPrank(account1); - uint256 earned2 = ldyStaking.earned(account1, 0); - ldyStaking.unstake(amount2, 0); - vm.stopPrank(); - assertEq(ldyToken.balanceOf(account1), amount1 + earned1 + amount2 + earned2); - - // check the lenght of earnedArray - earnedArray = ldyStaking.getEarnedUser(account1); - assertEq(earnedArray.length, 0); - } - - function testFuzz_Unstake_2(address account, uint256 amount, uint8 stakingPeriodIndex) public { - vm.assume(account != address(0)); - vm.assume(account != address(ldyToken)); - vm.assume(account != address(ldyStaking)); - vm.assume(amount != 0); - - amount = bound(amount, 100, 1_000_000 * 10 ** ldyToken.decimals()); - - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1)); - deal(address(ldyToken), account, amount); - - // account stakes ldy into the ldyStaking contract - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - - // account unstakes part of token - LDYStaking.StakeDurationInfo memory stakeDurationInfo = stakingDurationInfos[ - stakingPeriodIndex - ]; - uint256 skipDuration = stakeDurationInfo.duration; - uint256 partAmount = bound(amount, 1, amount - 1); - skip(skipDuration); - vm.startPrank(account); - ldyStaking.unstake(partAmount, 0); - vm.stopPrank(); - assertEq(ldyToken.balanceOf(account), partAmount); - - // check the lenght of earnedArray - uint256[] memory earnedArray = ldyStaking.getEarnedUser(account); - assertEq(earnedArray.length, 1); - - // account unstakes rest of token after 100 secs - uint256 restAmount = amount - partAmount; - skip(100); - vm.startPrank(account); - uint256 earned = ldyStaking.earned(account, 0); - assertGt(earned, 0); - ldyStaking.unstake(restAmount, 0); - vm.stopPrank(); - assertEq(ldyToken.balanceOf(account), amount + earned); - - // check the lenght of earnedArray - earnedArray = ldyStaking.getEarnedUser(account); - assertEq(earnedArray.length, 0); - } - - function testFuzz_GetReward_Failed( - address account, - uint256 amount, - uint8 stakingPeriodIndex - ) public { - vm.assume(account != address(0)); - vm.assume(account != address(ldyToken)); - vm.assume(account != address(ldyStaking)); - vm.assume(amount != 0); - - amount = bound(amount, 100, 1_000_000 * 10 ** ldyToken.decimals()); - - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1)); - deal(address(ldyToken), account, amount); - - // account stakes ldy into the ldyStaking contract - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - - vm.expectRevert("Invalid stakeIndex"); - vm.prank(account); - ldyStaking.getReward(100); - } - - function testFuzz_GetReward(address account, uint256 amount, uint8 stakingPeriodIndex) public { - vm.assume(account != address(0)); - vm.assume(account != address(ldyToken)); - vm.assume(account != address(ldyStaking)); - vm.assume(amount != 0); - - amount = bound( - amount, - 10000 * 10 ** ldyToken.decimals(), - 1_000_000 * 10 ** ldyToken.decimals() - ); - - stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1)); - deal(address(ldyToken), account, amount); - - // account stakes ldy into the ldyStaking contract - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), amount); - ldyStaking.stake(amount, stakingPeriodIndex); - vm.stopPrank(); - - // get rewards - vm.prank(account); - ldyStaking.getReward(0); - uint256 rewards0 = ldyToken.balanceOf(account); - assertEq(rewards0, 0); - - skip(100); - uint256 earned1 = ldyStaking.earned(account, 0); - vm.prank(account); - ldyStaking.getReward(0); - uint256 rewards1 = ldyToken.balanceOf(account); - assertGe(rewards1, earned1); - assertLt(ldyStaking.totalRewards(), initRewardsAmount); - - // After rewards duration(1year), rewards2 must greater than rewards1 - skip(12 * OneMonth); - uint256 earned2 = ldyStaking.earned(account, 0); - vm.prank(account); - ldyStaking.getReward(0); - uint256 rewards2 = ldyToken.balanceOf(account); - assertGt(earned2, 0); - assertGe(rewards2, earned2); - assertLt(ldyStaking.totalRewards(), initRewardsAmount); - - // After 1year, rewards3 must be equal to rewards2, as there's no rewards accumulation - skip(12 * OneMonth); - uint256 earned3 = ldyStaking.earned(account, 0); - vm.prank(account); - ldyStaking.getReward(0); - uint256 rewards3 = ldyToken.balanceOf(account); - assertGe(earned3, 0); - assertEq(rewards3, rewards2); - assertLt(ldyStaking.totalRewards(), initRewardsAmount); - } - - function test_SetRewardsDurationByOwner() public { - address nonOwner = address(1234); - expectRevertOnlyOwner(); - vm.prank(nonOwner); - ldyStaking.setRewardsDuration(123); - - skip(OneMonth); - - uint256 newRewardsDuration = 6 * OneMonth; - vm.expectRevert("reward duration is not finished"); - ldyStaking.setRewardsDuration(newRewardsDuration); - - skip(initRewardsDuration); - ldyStaking.setRewardsDuration(newRewardsDuration); - } - - function test_NotifyRewardAmountByOwner() public { - address nonOwner = address(1234); - expectRevertOnlyOwner(); - vm.prank(nonOwner); - ldyStaking.notifyRewardAmount(123); - - vm.expectRevert("amount = 0"); - ldyStaking.notifyRewardAmount(0); - - assertEq(ldyStaking.totalRewards(), initRewardsAmount); - uint256 rewardsAmount = 1_000_000e18; - deal(address(ldyToken), address(this), rewardsAmount); - ldyToken.approve(address(ldyStaking), rewardsAmount); - ldyStaking.notifyRewardAmount(rewardsAmount); - assertEq(ldyStaking.totalRewards(), initRewardsAmount + rewardsAmount); - } - - function testFuzz_SetStakeDurationForPerksByOwner(uint256 duration) public { - address nonOwner = address(1234); - expectRevertOnlyOwner(); - vm.prank(nonOwner); - ldyStaking.setStakeDurationForPerks(duration); - - ldyStaking.setStakeDurationForPerks(duration); - } - - function testFuzz_SetStakeAmountForPerksByOwner(uint256 amount) public { - address nonOwner = address(1234); - expectRevertOnlyOwner(); - vm.prank(nonOwner); - ldyStaking.setStakeAmountForPerks(amount); - - ldyStaking.setStakeAmountForPerks(amount); - } + GlobalOwner globalOwner; + GlobalPause globalPause; + GlobalBlacklist globalBlacklist; + + LDYStaking ldyStaking; + GenericERC20 ldyToken; + + uint256 public constant OneMonth = 31 * 24 * 60 * 60; + LDYStaking.StakeDurationInfo[] public stakingDurationInfos; + uint256 public initRewardsDuration = 12 * OneMonth; + uint256 public initRewardsAmount = 1_000_000e18; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + GlobalPause impl2 = new GlobalPause(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + globalPause = GlobalPause(address(proxy2)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + ldyToken = new GenericERC20("Ledgity Token", "LDY", 18); + vm.label(address(ldyToken), "LDY token"); + + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(0 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(1 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(6 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(12 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(24 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(36 * OneMonth, 10000) + ); + + // Deploy LDYStaking + LDYStaking impl4 = new LDYStaking(); + ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); + ldyStaking = LDYStaking(address(proxy4)); + ldyStaking.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyToken), + stakingDurationInfos, + 12 * OneMonth, + 1000 * 1e18 + ); + + // Set initial rewards amount and duration + ldyStaking.setRewardsDuration(initRewardsDuration); + + deal(address(ldyToken), address(this), initRewardsAmount); + assertEq(ldyToken.balanceOf(address(this)), initRewardsAmount); + ldyToken.approve(address(ldyStaking), initRewardsAmount); + ldyStaking.notifyRewardAmount(initRewardsAmount); + } + + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + ldyStaking.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyToken), + stakingDurationInfos, + 12 * OneMonth, + 1000 * 1e18 + ); + } + + function test_initialize_2() public { + console.log( + "Should properly set global owner, pause, blacklist and ldy token" + ); + assertEq(ldyStaking.globalOwner(), address(globalOwner)); + assertEq(ldyStaking.globalPause(), address(globalPause)); + assertEq(ldyStaking.globalBlacklist(), address(globalBlacklist)); + assertEq( + address(ldyStaking.stakeRewardToken()), + address(ldyToken) + ); + } + + function test_paused() public { + console.log("Should return state of the global pause contract"); + assertEq(ldyStaking.paused(), false); + + globalPause.pause(); + assertEq(ldyStaking.paused(), true); + + // reverts staking in case of paused status + vm.expectRevert("Pausable: paused"); + ldyStaking.stake(1, 0); + + globalPause.unpause(); + assertEq(ldyStaking.paused(), false); + } + + function test_StakeFailed() public { + vm.expectRevert("amount = 0"); + ldyStaking.stake(0, 0); + + vm.expectRevert("Invalid staking period"); + ldyStaking.stake(1, uint8(stakingDurationInfos.length)); + + vm.expectRevert("ERC20: insufficient allowance"); + ldyStaking.stake(1, 0); + } + + function testFuzz_Stake_LessThanAmountForPerks( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(account != address(0)); + vm.assume(account != address(ldyToken)); + vm.assume(account != address(ldyStaking)); + vm.assume(amount != 0); + + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1) + ); + amount = bound(amount, 1, ldyStaking.stakeAmountForPerks() - 1); + + // deposit ldy token into the account + deal(address(ldyToken), account, amount); + + // stake ldy token into the ldyStaking contract + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + + assertEq(ldyStaking.tierOf(account), 0); + } + + function testFuzz_Stake_LessThanDurationForPerks( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(account != address(0)); + vm.assume(account != address(ldyToken)); + vm.assume(account != address(ldyStaking)); + vm.assume(amount != 0); + + stakingPeriodIndex = uint8(bound(stakingPeriodIndex, 0, 1)); + amount = bound( + amount, + ldyStaking.stakeAmountForPerks(), + 10_000_000 * 10 ** ldyToken.decimals() + ); + + // deposit ldy token into the account + deal(address(ldyToken), account, amount); + + // stake ldy token into the ldyStaking contract + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + + assertEq(ldyStaking.tierOf(account), 0); + } + + function testFuzz_Stake_ElligibleForPerks( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(account != address(0)); + vm.assume(account != address(ldyToken)); + vm.assume(account != address(ldyStaking)); + vm.assume(amount != 0); + + // stakingPeriodIndex is at least 3(1 year) to satisify perks condition in this case + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 3, stakingDurationInfos.length - 1) + ); + amount = bound( + amount, + ldyStaking.stakeAmountForPerks(), + 10_000_000 * 10 ** ldyToken.decimals() + ); + + // deposit ldy token into the account + deal(address(ldyToken), account, amount); + + // stake ldy token into the ldyStaking contract + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + assertEq(ldyStaking.tierOf(account), 3); + } + + function testFuzz_StakeToken( + address account1, + address account2, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1) + ); + vm.assume(account1 != address(0)); + vm.assume(account1 != address(ldyToken)); + vm.assume(account1 != address(ldyStaking)); + vm.assume(account2 != address(0)); + vm.assume(account2 != address(ldyToken)); + vm.assume(account2 != address(ldyStaking)); + vm.assume(amount != 0); + + // deposit ldy token into the account + amount = bound(amount, 1, 1_000_000 * 10 ** ldyToken.decimals()); + deal(address(ldyToken), account1, amount); + deal(address(ldyToken), account2, amount); + + // account1 stakes ldy into the ldyStaking contract first time + vm.startPrank(account1); + ldyToken.approve(address(ldyStaking), amount); + // vm.expectEmit(address(ldyStaking)); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + assertEq(ldyStaking.totalStaked(), amount); + + // account1 stakes ldy into the ldyStaking contract again + deal(address(ldyToken), account1, amount); + vm.startPrank(account1); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + assertEq(ldyStaking.totalStaked(), amount * 2); + + LDYStaking.StakingInfo[] memory account1StakingPools = ldyStaking + .getUserStakes(account1); + assertEq(account1StakingPools.length, 2); + + // account2 stakes ldy into the ldyStaking contract + vm.startPrank(account2); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + assertEq(ldyStaking.totalStaked(), amount * 3); + + LDYStaking.StakingInfo[] memory account2StakingPools = ldyStaking + .getUserStakes(account2); + assertEq(account2StakingPools.length, 1); + } + + function testFuzz_UnstakeFailed_1( + uint256 amount, + uint256 stakeIndex + ) public { + vm.assume(amount == 0); + vm.expectRevert("amount = 0"); + ldyStaking.unstake(amount, stakeIndex); + } + + function testFuzz_UnstakeFailed_2( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(amount != 0); + vm.assume(account != address(0)); + vm.assume(account != address(ldyStaking)); + vm.assume(account != address(ldyToken)); + vm.assume(amount != 0); + amount = bound(amount, 1, 1_000_000 * 10 ** ldyToken.decimals()); + + // stakingPeriodIndex is at least 1 in this case + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 1, stakingDurationInfos.length - 1) + ); + deal(address(ldyToken), account, amount); + + // stake + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + + // unstake fail + vm.expectRevert("Cannot unstake during staking period"); + vm.prank(account); + ldyStaking.unstake(amount, 0); + + LDYStaking.StakeDurationInfo + memory stakeDurationInfo = stakingDurationInfos[ + stakingPeriodIndex + ]; + uint256 skipDuration = stakeDurationInfo.duration; + skip(skipDuration); + + vm.expectRevert("Insufficient unstake amount"); + vm.prank(account); + ldyStaking.unstake(amount + 1, 0); + + vm.expectRevert("Invalid stakeIndex"); + vm.prank(account); + ldyStaking.unstake(amount + 1, 100); + } + + function testFuzz_Unstake_1( + address account1, + uint256 amount1, + uint256 amount2, + uint8 stakingPeriodIndex1, + uint8 stakingPeriodIndex2 + ) public { + vm.assume(account1 != address(0)); + vm.assume(account1 != address(ldyToken)); + vm.assume(account1 != address(ldyStaking)); + vm.assume(amount1 != 0); + vm.assume(amount2 != 0); + + amount1 = bound( + amount1, + 1, + 1_000_000 * 10 ** ldyToken.decimals() + ); + amount2 = bound( + amount1, + 1, + 1_000_000 * 10 ** ldyToken.decimals() + ); + stakingPeriodIndex1 = uint8( + bound(stakingPeriodIndex1, 0, stakingDurationInfos.length - 1) + ); + stakingPeriodIndex2 = uint8( + bound(stakingPeriodIndex2, 0, stakingDurationInfos.length - 1) + ); + deal(address(ldyToken), account1, amount1 + amount2); + + // account1 stakes ldy into the ldyStaking contract first time + vm.startPrank(account1); + ldyToken.approve(address(ldyStaking), amount1 + amount2); + ldyStaking.stake(amount1, stakingPeriodIndex1); + + // account1 stakes ldy into the ldyStaking contract again + ldyStaking.stake(amount2, stakingPeriodIndex2); + vm.stopPrank(); + + // check the lenght of earnedArray + uint256[] memory earnedArray = ldyStaking.getEarnedUser(account1); + assertEq(earnedArray.length, 2); + + // account1 unstakes token from staking pool 1 + LDYStaking.StakeDurationInfo + memory stakeDurationInfo1 = stakingDurationInfos[ + stakingPeriodIndex1 + ]; + uint256 skipDuration1 = stakeDurationInfo1.duration; + skip(skipDuration1); + vm.startPrank(account1); + uint256 earned1 = ldyStaking.earned(account1, 0); + ldyStaking.unstake(amount1, 0); + vm.stopPrank(); + assertEq(ldyToken.balanceOf(account1), amount1 + earned1); + + // check the lenght of earnedArray + earnedArray = ldyStaking.getEarnedUser(account1); + assertEq(earnedArray.length, 1); + + // account1 unstakes token from staking pool 2 + LDYStaking.StakeDurationInfo + memory stakeDurationInfo2 = stakingDurationInfos[ + stakingPeriodIndex2 + ]; + uint256 skipDuration2 = stakeDurationInfo2.duration; + + skip(skipDuration2); + vm.startPrank(account1); + uint256 earned2 = ldyStaking.earned(account1, 0); + ldyStaking.unstake(amount2, 0); + vm.stopPrank(); + assertEq( + ldyToken.balanceOf(account1), + amount1 + earned1 + amount2 + earned2 + ); + + // check the lenght of earnedArray + earnedArray = ldyStaking.getEarnedUser(account1); + assertEq(earnedArray.length, 0); + } + + function testFuzz_Unstake_2( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(account != address(0)); + vm.assume(account != address(ldyToken)); + vm.assume(account != address(ldyStaking)); + vm.assume(amount != 0); + + amount = bound( + amount, + 100, + 1_000_000 * 10 ** ldyToken.decimals() + ); + + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1) + ); + deal(address(ldyToken), account, amount); + + // account stakes ldy into the ldyStaking contract + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + + // account unstakes part of token + LDYStaking.StakeDurationInfo + memory stakeDurationInfo = stakingDurationInfos[ + stakingPeriodIndex + ]; + uint256 skipDuration = stakeDurationInfo.duration; + uint256 partAmount = bound(amount, 1, amount - 1); + skip(skipDuration); + vm.startPrank(account); + ldyStaking.unstake(partAmount, 0); + vm.stopPrank(); + assertEq(ldyToken.balanceOf(account), partAmount); + + // check the lenght of earnedArray + uint256[] memory earnedArray = ldyStaking.getEarnedUser(account); + assertEq(earnedArray.length, 1); + + // account unstakes rest of token after 100 secs + uint256 restAmount = amount - partAmount; + skip(100); + vm.startPrank(account); + uint256 earned = ldyStaking.earned(account, 0); + assertGt(earned, 0); + ldyStaking.unstake(restAmount, 0); + vm.stopPrank(); + assertEq(ldyToken.balanceOf(account), amount + earned); + + // check the lenght of earnedArray + earnedArray = ldyStaking.getEarnedUser(account); + assertEq(earnedArray.length, 0); + } + + function testFuzz_GetReward_Failed( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(account != address(0)); + vm.assume(account != address(ldyToken)); + vm.assume(account != address(ldyStaking)); + vm.assume(amount != 0); + + amount = bound( + amount, + 100, + 1_000_000 * 10 ** ldyToken.decimals() + ); + + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1) + ); + deal(address(ldyToken), account, amount); + + // account stakes ldy into the ldyStaking contract + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + + vm.expectRevert("Invalid stakeIndex"); + vm.prank(account); + ldyStaking.getReward(100); + } + + function testFuzz_GetReward( + address account, + uint256 amount, + uint8 stakingPeriodIndex + ) public { + vm.assume(account != address(0)); + vm.assume(account != address(ldyToken)); + vm.assume(account != address(ldyStaking)); + vm.assume(amount != 0); + + amount = bound( + amount, + 10000 * 10 ** ldyToken.decimals(), + 1_000_000 * 10 ** ldyToken.decimals() + ); + + stakingPeriodIndex = uint8( + bound(stakingPeriodIndex, 0, stakingDurationInfos.length - 1) + ); + deal(address(ldyToken), account, amount); + + // account stakes ldy into the ldyStaking contract + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), amount); + ldyStaking.stake(amount, stakingPeriodIndex); + vm.stopPrank(); + + // get rewards + vm.prank(account); + ldyStaking.getReward(0); + uint256 rewards0 = ldyToken.balanceOf(account); + assertEq(rewards0, 0); + + skip(100); + uint256 earned1 = ldyStaking.earned(account, 0); + vm.prank(account); + ldyStaking.getReward(0); + uint256 rewards1 = ldyToken.balanceOf(account); + assertGe(rewards1, earned1); + assertLt(ldyStaking.totalRewards(), initRewardsAmount); + + // After rewards duration(1year), rewards2 must greater than rewards1 + skip(12 * OneMonth); + uint256 earned2 = ldyStaking.earned(account, 0); + vm.prank(account); + ldyStaking.getReward(0); + uint256 rewards2 = ldyToken.balanceOf(account); + assertGt(earned2, 0); + assertGe(rewards2, earned2); + assertLt(ldyStaking.totalRewards(), initRewardsAmount); + + // After 1year, rewards3 must be equal to rewards2, as there's no rewards accumulation + skip(12 * OneMonth); + uint256 earned3 = ldyStaking.earned(account, 0); + vm.prank(account); + ldyStaking.getReward(0); + uint256 rewards3 = ldyToken.balanceOf(account); + assertGe(earned3, 0); + assertEq(rewards3, rewards2); + assertLt(ldyStaking.totalRewards(), initRewardsAmount); + } + + function test_SetRewardsDurationByOwner() public { + address nonOwner = address(1234); + expectRevertOnlyOwner(); + vm.prank(nonOwner); + ldyStaking.setRewardsDuration(123); + + skip(OneMonth); + + uint256 newRewardsDuration = 6 * OneMonth; + vm.expectRevert("reward duration is not finished"); + ldyStaking.setRewardsDuration(newRewardsDuration); + + skip(initRewardsDuration); + ldyStaking.setRewardsDuration(newRewardsDuration); + } + + function test_NotifyRewardAmountByOwner() public { + address nonOwner = address(1234); + expectRevertOnlyOwner(); + vm.prank(nonOwner); + ldyStaking.notifyRewardAmount(123); + + vm.expectRevert("amount = 0"); + ldyStaking.notifyRewardAmount(0); + + assertEq(ldyStaking.totalRewards(), initRewardsAmount); + uint256 rewardsAmount = 1_000_000e18; + deal(address(ldyToken), address(this), rewardsAmount); + ldyToken.approve(address(ldyStaking), rewardsAmount); + ldyStaking.notifyRewardAmount(rewardsAmount); + assertEq( + ldyStaking.totalRewards(), + initRewardsAmount + rewardsAmount + ); + } + + function testFuzz_SetStakeDurationForPerksByOwner( + uint256 duration + ) public { + address nonOwner = address(1234); + expectRevertOnlyOwner(); + vm.prank(nonOwner); + ldyStaking.setStakeDurationForPerks(duration); + + ldyStaking.setStakeDurationForPerks(duration); + } + + function testFuzz_SetStakeAmountForPerksByOwner( + uint256 amount + ) public { + address nonOwner = address(1234); + expectRevertOnlyOwner(); + vm.prank(nonOwner); + ldyStaking.setStakeAmountForPerks(amount); + + ldyStaking.setStakeAmountForPerks(amount); + } } diff --git a/contracts/foundry/test/LToken.t.sol b/contracts/foundry/test/LToken.t.sol index 85eb8bc4..c48cad77 100644 --- a/contracts/foundry/test/LToken.t.sol +++ b/contracts/foundry/test/LToken.t.sol @@ -2,5071 +2,5774 @@ pragma solidity ^0.8.18; import "../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "./_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "./_helpers/ModifiersExpectations.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import {LToken} from "../../src/LToken.sol"; +import { LToken } from "../../src/LToken.sol"; -import {LDYStaking} from "../../src/LDYStaking.sol"; -import {GlobalOwner} from "../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../src/GlobalPause.sol"; -import {GlobalBlacklist} from "../../src/GlobalBlacklist.sol"; -import {GenericERC20} from "../../src/GenericERC20.sol"; +import { LDYStaking } from "../../src/LDYStaking.sol"; +import { GlobalOwner } from "../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../src/GlobalPause.sol"; +import { GlobalBlacklist } from "../../src/GlobalBlacklist.sol"; +import { GenericERC20 } from "../../src/GenericERC20.sol"; -import {SUD} from "../../src/libs/SUD.sol"; -import {APRHistory as APRH} from "../../src/libs/APRHistory.sol"; -import {ITransfersListener} from "../../src/interfaces/ITransfersListener.sol"; +import { SUD } from "../../src/libs/SUD.sol"; +import { APRHistory as APRH } from "../../src/libs/APRHistory.sol"; +import { ITransfersListener } from "../../src/interfaces/ITransfersListener.sol"; contract Vault is ITransfersListener { - /// @dev Holds the LToken contract address allowed to call onLTokenTransfer() - address public lToken; - - /// @dev Stores data received from onLTokenTransfer() - struct HookData { - address from; - address to; - uint256 amount; - } - HookData[] public hookData; - - /// @dev Modifier to restrict access to the LToken contract - modifier onlyLToken() { - require(msg.sender == lToken, "Vault: restricted to LToken"); - _; - } - - /// @dev Sets the LToken contract address allowed to call onLTokenTransfer() at deployment-time - constructor(address _lToken) { - lToken = _lToken; - } - - /** - * @dev Implementation of ITransfersListener.onLTokenTransfer() that simply stores - * the received data on chain so unit tests can easily assert that this function has - * been called with the expected parameters. - */ - function onLTokenTransfer(address from, address to, uint256 amount) external onlyLToken { - hookData.push(HookData(from, to, amount)); - } + /// @dev Holds the LToken contract address allowed to call onLTokenTransfer() + address public lToken; + + /// @dev Stores data received from onLTokenTransfer() + struct HookData { + address from; + address to; + uint256 amount; + } + HookData[] public hookData; + + /// @dev Modifier to restrict access to the LToken contract + modifier onlyLToken() { + require(msg.sender == lToken, "Vault: restricted to LToken"); + _; + } + + /// @dev Sets the LToken contract address allowed to call onLTokenTransfer() at deployment-time + constructor(address _lToken) { + lToken = _lToken; + } + + /** + * @dev Implementation of ITransfersListener.onLTokenTransfer() that simply stores + * the received data on chain so unit tests can easily assert that this function has + * been called with the expected parameters. + */ + function onLTokenTransfer( + address from, + address to, + uint256 amount + ) external onlyLToken { + hookData.push(HookData(from, to, amount)); + } } contract TestedContract is LToken { - /** - * @dev Functions to tests modifiers - */ - function restrictedToWithdrawer() public onlyWithdrawer {} - - function restrictedToFund() public onlyFund {} - - /** - * @dev Functions to manually set variables - */ - function tool_rawSetUnclaimedFees(uint256 amount) public { - unclaimedFees = amount; - } - - function tool_rawSetTotalQueued(uint256 amount) public { - totalQueued = amount; - } - - function tool_rawSetUsableUnderlyings(uint256 amount) public { - usableUnderlyings = amount; - } - - /** - * @dev Uncapped setter for the retention rate - */ - function tool_setRetentionRate(uint32 _retentionRateUD7x3) public { - retentionRateUD7x3 = _retentionRateUD7x3; - } - - function tool_simulateProcessedBigRequestInQueue() public { - withdrawalQueue.push(WithdrawalRequest(address(0), 0)); - delete withdrawalQueue[withdrawalQueue.length - 1]; - } - - /** - * @dev Make some useful InvestUpgradeable functions public to use them in tests - */ - function public_accountsInfos(address account) public view returns (AccountDetails memory) { - return accountsDetails[account]; - } - - /** - * @dev Make some useful LToken functions public to use them in tests - */ - function public_distributeRewards(address account, uint256 amount) public returns (bool) { - return _distributeRewards(account, amount); - } - - function public_beforeTokenTransfer(address from, address to, uint256 amount) public { - return _beforeTokenTransfer(from, to, amount); - } - - function public_transferExceedingToFund() public { - return _transferExceedingToFund(); - } - - function public_withdrawalQueueLength() public view returns (uint256) { - return withdrawalQueue.length; - } - - function public_withdrawalQueueCursor() public view returns (uint256) { - return withdrawalQueueCursor; - } - - function public_frozenRequestsLength() public view returns (uint256) { - return frozenRequests.length; - } + /** + * @dev Functions to tests modifiers + */ + function restrictedToWithdrawer() public onlyWithdrawer {} + + function restrictedToFund() public onlyFund {} + + /** + * @dev Functions to manually set variables + */ + function tool_rawSetUnclaimedFees(uint256 amount) public { + unclaimedFees = amount; + } + + function tool_rawSetTotalQueued(uint256 amount) public { + totalQueued = amount; + } + + function tool_rawSetUsableUnderlyings(uint256 amount) public { + usableUnderlyings = amount; + } + + /** + * @dev Uncapped setter for the retention rate + */ + function tool_setRetentionRate(uint32 _retentionRateUD7x3) public { + retentionRateUD7x3 = _retentionRateUD7x3; + } + + function tool_simulateProcessedBigRequestInQueue() public { + withdrawalQueue.push(WithdrawalRequest(address(0), 0)); + delete withdrawalQueue[withdrawalQueue.length - 1]; + } + + /** + * @dev Make some useful InvestUpgradeable functions public to use them in tests + */ + function public_accountsInfos( + address account + ) public view returns (AccountDetails memory) { + return accountsDetails[account]; + } + + /** + * @dev Make some useful LToken functions public to use them in tests + */ + function public_distributeRewards( + address account, + uint256 amount + ) public returns (bool) { + return _distributeRewards(account, amount); + } + + function public_beforeTokenTransfer( + address from, + address to, + uint256 amount + ) public { + return _beforeTokenTransfer(from, to, amount); + } + + function public_transferExceedingToFund() public { + return _transferExceedingToFund(); + } + + function public_withdrawalQueueLength() + public + view + returns (uint256) + { + return withdrawalQueue.length; + } + + function public_withdrawalQueueCursor() + public + view + returns (uint256) + { + return withdrawalQueueCursor; + } + + function public_frozenRequestsLength() + public + view + returns (uint256) + { + return frozenRequests.length; + } } // Contract used to simulate a failing ETH transfer contract FailingReceiver { - fallback() external payable { - revert("Failing intentionally"); - } + fallback() external payable { + revert("Failing intentionally"); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GlobalPause globalPause; - GlobalBlacklist globalBlacklist; - LDYStaking ldyStaking; - - GenericERC20 ldyToken; - GenericERC20 underlyingToken; - GenericERC20 anotherToken; - - Vault vault1; - Vault vault2; - - address payable withdrawerWallet = payable(address(bytes20("withdrawerWallet"))); - address payable fundWallet = payable(address(bytes20("fundWallet"))); - - uint256 public constant OneMonth = 31 * 24 * 60 * 60; - LDYStaking.StakeDurationInfo[] public stakingDurationInfos; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - GlobalPause impl2 = new GlobalPause(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - globalPause = GlobalPause(address(proxy2)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - // Deploy GenericERC20 (the $LDY token) - ldyToken = new GenericERC20("Ledgity Token", "LDY", 18); - vm.label(address(ldyToken), "LDY token"); - - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(0 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(1 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(6 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(12 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(24 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(36 * OneMonth, 10000)); - - // Deploy LDYStaking - LDYStaking impl4 = new LDYStaking(); - ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); - ldyStaking = LDYStaking(address(proxy4)); - ldyStaking.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyToken), - stakingDurationInfos, - 12 * OneMonth, - 1000 * 1e18 - ); - - // Deploy GenericERC20 (the underlying token) - underlyingToken = new GenericERC20("Dummy USD", "DUSD", 18); - vm.label(address(underlyingToken), "Underlying Token"); - - // Deploy GenericERC20 (another random token) - anotherToken = new GenericERC20("Another Token", "ANADA", 18); - vm.label(address(anotherToken), "Another Token"); - - // Deploy tested LToken contract - TestedContract impl5 = new TestedContract(); - ERC1967Proxy proxy5 = new ERC1967Proxy(address(impl5), ""); - tested = TestedContract(address(proxy5)); - tested.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyStaking), - address(underlyingToken) - ); - vm.label(address(tested), "LToken"); - - // Set withdrawer wallet - tested.setWithdrawer(withdrawerWallet); - - // Set fund wallet - tested.setFund(fundWallet); - - // Deploy a first external Vault contract (a transfers listener) - vault1 = new Vault(address(tested)); - vm.label(address(vault1), "Vault 1"); - - // Deploy a second external Vault contract (a transfers listener) - vault2 = new Vault(address(tested)); - vm.label(address(vault2), "Vault 2"); - } - - // ================== - // === Invariants === - // - Usable underlyings should never exceeds expected retained - function invariant_1() external { - if (tested.decimals() > 18) return; - assertLe(tested.usableUnderlyings(), tested.getExpectedRetained()); - } - - // - Contract underlying balance should never be lower than usable underlyings amount (= missing funds) - function invariant_2() external { - if (tested.decimals() > 18) return; - - assertGe(underlyingToken.balanceOf(address(tested)), tested.usableUnderlyings()); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - tested.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyStaking), - address(underlyingToken) - ); - } - - function test_initialize_2() public { - console.log("Should properly set global owner, pause, blacklist and ldy staking"); - assertEq(tested.globalOwner(), address(globalOwner)); - assertEq(tested.globalPause(), address(globalPause)); - assertEq(tested.globalBlacklist(), address(globalBlacklist)); - assertEq(address(tested.ldyStaking()), address(ldyStaking)); - } - - function test_initialize_3() public { - console.log("Should properly set invested token to self"); - assertEq(address(tested.invested()), address(tested)); - } - - function test_initialize_4() public { - console.log("Should properly set wrapped token"); - assertEq(address(tested.underlying()), address(underlyingToken)); - } - - function test_initialize_5() public { - console.log("Should properly set L-Token name and symbol from underlying token ones"); - assertEq(tested.name(), string.concat("Ledgity ", underlyingToken.symbol())); - assertEq(tested.symbol(), string.concat("L", underlyingToken.symbol())); - } - - function test_initialize_6() public { - console.log("Should initialize withdrawal fees to 0.3%"); - assertEq(tested.feesRateUD7x3(), 300); - } - - function test_initialize_7() public { - console.log("Should initialize retention rate to 10%"); - assertEq(tested.retentionRateUD7x3(), 10_000); - } - - // ========================= - // === paused() function === - function test_paused_1() public { - console.log("Should return state of the global pause contract"); - assertEq(tested.paused(), false); - globalPause.pause(); - assertEq(tested.paused(), true); - globalPause.unpause(); - assertEq(tested.paused(), false); - } - - // =============================== - // === onlyWithdrawer modifier === - function testFuzz_onlyWithdrawer_1(address account) public { - console.log( - "Should revert calls made from non-withdrawer wallet and success withdrawer ones" - ); - - // Ensure that account is not the withdrawer wallet - vm.assume(account != withdrawerWallet); - - // Should revert - vm.expectRevert(bytes("L39")); - vm.prank(account); - tested.restrictedToWithdrawer(); - - // Shouldn't revert - vm.prank(withdrawerWallet); - tested.restrictedToWithdrawer(); - } - - // ========================= - // === onlyFund modifier === - function test_onlyFund_1(address account) public { - console.log("Should revert calls made from non-fund wallet and success fund ones"); - - // Ensure that account is not the withdrawer wallet - vm.assume(account != fundWallet); - - // Should revert - vm.expectRevert(bytes("L40")); - vm.prank(account); - tested.restrictedToFund(); - - // Shouldn't revert - vm.prank(fundWallet); - tested.restrictedToFund(); - } - - // ============================== - // === setFeesRate() function === - function testFuzz_setFeesRate_1(address account, uint32 _feesRateUD7x3) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.setFeesRate(_feesRateUD7x3); - } - - function testFuzz_setFeesRate_2(uint32 _feesRateUD7x3) public { - console.log("Should change value of feesRateUD7x3"); - tested.setFeesRate(_feesRateUD7x3); - assertEq(tested.feesRateUD7x3(), _feesRateUD7x3); - } - - // ==================================== - // === setRetentionRate() function ==== - function testFuzz_setRetentionRate_1(address account, uint32 _retentionRateUD7x3) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.setRetentionRate(_retentionRateUD7x3); - } - - function testFuzz_setRetentionRate_2(uint32 _retentionRateUD7x3) public { - console.log("Should revert if trying to set retention rate higher than 10%"); - - // Ensure the retention rate is >10% - _retentionRateUD7x3 = uint32( - bound(_retentionRateUD7x3, 10 * 10 ** 3 + 1, type(uint32).max) - ); - - // Expect revert - vm.expectRevert(bytes("L41")); - tested.setRetentionRate(_retentionRateUD7x3); - } - - function testFuzz_setRetentionRate_3(uint32 _retentionRateUD7x3) public { - console.log("Should change value of retentionRateUD7x3 else"); - - // Ensure the retention rate is <10% - _retentionRateUD7x3 = uint32(bound(_retentionRateUD7x3, 0, 10 * 10 ** 3)); - - tested.setRetentionRate(_retentionRateUD7x3); - assertEq(tested.retentionRateUD7x3(), _retentionRateUD7x3); - } - - // ================================ - // === setLDYStaking() function === - function testFuzz_setLDYStaking_1(address account, address _contract) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.setLDYStaking(_contract); - } - - function testFuzz_setLDYStaking_2(address _contract) public { - console.log("Should change value of ldyStaking"); - tested.setLDYStaking(_contract); - assertEq(address(tested.ldyStaking()), _contract); - } - - // ============================== - // === setWithdrawer() function === - function testFuzz_setWithdrawer_1(address account, address payable _withdrawer) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.setWithdrawer(_withdrawer); - } - - function testFuzz_setWithdrawer_2() public { - console.log("Should revert if trying to set the zero address as withdrawer"); - - // Expect revert - vm.expectRevert(bytes("L63")); - tested.setWithdrawer(payable(address(0))); - } - - function testFuzz_setWithdrawer_3(address payable _withdrawer) public { - console.log("Should change value of withdrawer"); - - // Ensure new address is not the zero address - vm.assume(_withdrawer != address(0)); - - // Set new withdrawer - tested.setWithdrawer(_withdrawer); - - // Assert that the withdrawer address has been changed - assertEq(address(tested.withdrawer()), _withdrawer); - } - - // ========================== - // === setFund() function === - function testFuzz_setFund_1(address account, address payable _fund) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.setFund(_fund); - } - - function testFuzz_setFund_2() public { - console.log("Should revert if trying to set the zero address as fund"); - - // Expect revert - vm.expectRevert(bytes("L64")); - tested.setFund(payable(address(0))); - } - - function testFuzz_setFund_3(address payable _fund) public { - console.log("Should else change value of fund"); - - // Ensure new address is not the zero address - vm.assume(_fund != address(0)); - - // Set new fund - tested.setFund(_fund); - - // Assert that the fund address has been changed - assertEq(address(tested.fund()), _fund); - } - - // ==================================== - // === listenToTransfers() function === - function testFuzz_listenToTransfers_1(address account, address listenerContract) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.listenToTransfers(listenerContract); - } - - function testFuzz_listenToTransfers_2( - address listenersContract1, - address listenerContract2 - ) public { - console.log( - "Should else push given contract address at the end of the transfersListeners array" - ); - - // Listen to transfers from contract 1 - tested.listenToTransfers(listenersContract1); + TestedContract tested; + GlobalOwner globalOwner; + GlobalPause globalPause; + GlobalBlacklist globalBlacklist; + LDYStaking ldyStaking; + + GenericERC20 ldyToken; + GenericERC20 underlyingToken; + GenericERC20 anotherToken; + + Vault vault1; + Vault vault2; + + address payable withdrawerWallet = + payable(address(bytes20("withdrawerWallet"))); + address payable fundWallet = + payable(address(bytes20("fundWallet"))); + + uint256 public constant OneMonth = 31 * 24 * 60 * 60; + LDYStaking.StakeDurationInfo[] public stakingDurationInfos; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + GlobalPause impl2 = new GlobalPause(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + globalPause = GlobalPause(address(proxy2)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + // Deploy GenericERC20 (the $LDY token) + ldyToken = new GenericERC20("Ledgity Token", "LDY", 18); + vm.label(address(ldyToken), "LDY token"); + + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(0 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(1 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(6 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(12 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(24 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(36 * OneMonth, 10000) + ); + + // Deploy LDYStaking + LDYStaking impl4 = new LDYStaking(); + ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); + ldyStaking = LDYStaking(address(proxy4)); + ldyStaking.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyToken), + stakingDurationInfos, + 12 * OneMonth, + 1000 * 1e18 + ); + + // Deploy GenericERC20 (the underlying token) + underlyingToken = new GenericERC20("Dummy USD", "DUSD", 18); + vm.label(address(underlyingToken), "Underlying Token"); + + // Deploy GenericERC20 (another random token) + anotherToken = new GenericERC20("Another Token", "ANADA", 18); + vm.label(address(anotherToken), "Another Token"); + + // Deploy tested LToken contract + TestedContract impl5 = new TestedContract(); + ERC1967Proxy proxy5 = new ERC1967Proxy(address(impl5), ""); + tested = TestedContract(address(proxy5)); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyStaking), + address(underlyingToken) + ); + vm.label(address(tested), "LToken"); + + // Set withdrawer wallet + tested.setWithdrawer(withdrawerWallet); + + // Set fund wallet + tested.setFund(fundWallet); + + // Deploy a first external Vault contract (a transfers listener) + vault1 = new Vault(address(tested)); + vm.label(address(vault1), "Vault 1"); + + // Deploy a second external Vault contract (a transfers listener) + vault2 = new Vault(address(tested)); + vm.label(address(vault2), "Vault 2"); + } + + // ================== + // === Invariants === + // - Usable underlyings should never exceeds expected retained + function invariant_1() external { + if (tested.decimals() > 18) return; + assertLe( + tested.usableUnderlyings(), + tested.getExpectedRetained() + ); + } + + // - Contract underlying balance should never be lower than usable underlyings amount (= missing funds) + function invariant_2() external { + if (tested.decimals() > 18) return; + + assertGe( + underlyingToken.balanceOf(address(tested)), + tested.usableUnderlyings() + ); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyStaking), + address(underlyingToken) + ); + } + + function test_initialize_2() public { + console.log( + "Should properly set global owner, pause, blacklist and ldy staking" + ); + assertEq(tested.globalOwner(), address(globalOwner)); + assertEq(tested.globalPause(), address(globalPause)); + assertEq(tested.globalBlacklist(), address(globalBlacklist)); + assertEq(address(tested.ldyStaking()), address(ldyStaking)); + } + + function test_initialize_3() public { + console.log("Should properly set invested token to self"); + assertEq(address(tested.invested()), address(tested)); + } + + function test_initialize_4() public { + console.log("Should properly set wrapped token"); + assertEq(address(tested.underlying()), address(underlyingToken)); + } + + function test_initialize_5() public { + console.log( + "Should properly set L-Token name and symbol from underlying token ones" + ); + assertEq( + tested.name(), + string.concat("Ledgity ", underlyingToken.symbol()) + ); + assertEq( + tested.symbol(), + string.concat("L", underlyingToken.symbol()) + ); + } + + function test_initialize_6() public { + console.log("Should initialize withdrawal fees to 0.3%"); + assertEq(tested.feesRateUD7x3(), 300); + } + + function test_initialize_7() public { + console.log("Should initialize retention rate to 10%"); + assertEq(tested.retentionRateUD7x3(), 10_000); + } + + // ========================= + // === paused() function === + function test_paused_1() public { + console.log("Should return state of the global pause contract"); + assertEq(tested.paused(), false); + globalPause.pause(); + assertEq(tested.paused(), true); + globalPause.unpause(); + assertEq(tested.paused(), false); + } + + // =============================== + // === onlyWithdrawer modifier === + function testFuzz_onlyWithdrawer_1(address account) public { + console.log( + "Should revert calls made from non-withdrawer wallet and success withdrawer ones" + ); + + // Ensure that account is not the withdrawer wallet + vm.assume(account != withdrawerWallet); + + // Should revert + vm.expectRevert(bytes("L39")); + vm.prank(account); + tested.restrictedToWithdrawer(); + + // Shouldn't revert + vm.prank(withdrawerWallet); + tested.restrictedToWithdrawer(); + } + + // ========================= + // === onlyFund modifier === + function test_onlyFund_1(address account) public { + console.log( + "Should revert calls made from non-fund wallet and success fund ones" + ); + + // Ensure that account is not the withdrawer wallet + vm.assume(account != fundWallet); + + // Should revert + vm.expectRevert(bytes("L40")); + vm.prank(account); + tested.restrictedToFund(); + + // Shouldn't revert + vm.prank(fundWallet); + tested.restrictedToFund(); + } + + // ============================== + // === setFeesRate() function === + function testFuzz_setFeesRate_1( + address account, + uint32 _feesRateUD7x3 + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.setFeesRate(_feesRateUD7x3); + } + + function testFuzz_setFeesRate_2(uint32 _feesRateUD7x3) public { + console.log("Should change value of feesRateUD7x3"); + tested.setFeesRate(_feesRateUD7x3); + assertEq(tested.feesRateUD7x3(), _feesRateUD7x3); + } + + // ==================================== + // === setRetentionRate() function ==== + function testFuzz_setRetentionRate_1( + address account, + uint32 _retentionRateUD7x3 + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.setRetentionRate(_retentionRateUD7x3); + } + + function testFuzz_setRetentionRate_2( + uint32 _retentionRateUD7x3 + ) public { + console.log( + "Should revert if trying to set retention rate higher than 10%" + ); + + // Ensure the retention rate is >10% + _retentionRateUD7x3 = uint32( + bound(_retentionRateUD7x3, 10 * 10 ** 3 + 1, type(uint32).max) + ); + + // Expect revert + vm.expectRevert(bytes("L41")); + tested.setRetentionRate(_retentionRateUD7x3); + } + + function testFuzz_setRetentionRate_3( + uint32 _retentionRateUD7x3 + ) public { + console.log("Should change value of retentionRateUD7x3 else"); + + // Ensure the retention rate is <10% + _retentionRateUD7x3 = uint32( + bound(_retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + tested.setRetentionRate(_retentionRateUD7x3); + assertEq(tested.retentionRateUD7x3(), _retentionRateUD7x3); + } + + // ================================ + // === setLDYStaking() function === + function testFuzz_setLDYStaking_1( + address account, + address _contract + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.setLDYStaking(_contract); + } + + function testFuzz_setLDYStaking_2(address _contract) public { + console.log("Should change value of ldyStaking"); + tested.setLDYStaking(_contract); + assertEq(address(tested.ldyStaking()), _contract); + } + + // ============================== + // === setWithdrawer() function === + function testFuzz_setWithdrawer_1( + address account, + address payable _withdrawer + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.setWithdrawer(_withdrawer); + } + + function testFuzz_setWithdrawer_2() public { + console.log( + "Should revert if trying to set the zero address as withdrawer" + ); + + // Expect revert + vm.expectRevert(bytes("L63")); + tested.setWithdrawer(payable(address(0))); + } + + function testFuzz_setWithdrawer_3( + address payable _withdrawer + ) public { + console.log("Should change value of withdrawer"); + + // Ensure new address is not the zero address + vm.assume(_withdrawer != address(0)); + + // Set new withdrawer + tested.setWithdrawer(_withdrawer); + + // Assert that the withdrawer address has been changed + assertEq(address(tested.withdrawer()), _withdrawer); + } + + // ========================== + // === setFund() function === + function testFuzz_setFund_1( + address account, + address payable _fund + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.setFund(_fund); + } + + function testFuzz_setFund_2() public { + console.log( + "Should revert if trying to set the zero address as fund" + ); + + // Expect revert + vm.expectRevert(bytes("L64")); + tested.setFund(payable(address(0))); + } + + function testFuzz_setFund_3(address payable _fund) public { + console.log("Should else change value of fund"); + + // Ensure new address is not the zero address + vm.assume(_fund != address(0)); + + // Set new fund + tested.setFund(_fund); + + // Assert that the fund address has been changed + assertEq(address(tested.fund()), _fund); + } + + // ==================================== + // === listenToTransfers() function === + function testFuzz_listenToTransfers_1( + address account, + address listenerContract + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.listenToTransfers(listenerContract); + } + + function testFuzz_listenToTransfers_2( + address listenersContract1, + address listenerContract2 + ) public { + console.log( + "Should else push given contract address at the end of the transfersListeners array" + ); + + // Listen to transfers from contract 1 + tested.listenToTransfers(listenersContract1); + + // Assert that contract 1 is at the end of the array + assertEq( + address(tested.transfersListeners(0)), + listenersContract1 + ); + + // Listen to transfers from contract 2 + tested.listenToTransfers(listenerContract2); + + // Assert that contract 2 is now at the end of the array + assertEq( + address(tested.transfersListeners(1)), + listenerContract2 + ); + } + + // ==================================== + // === unlistenToTransfers() function === + function testFuzz_unlistenToTransfers_1( + address account, + address listenerContract + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.unlistenToTransfers(listenerContract); + } + + function testFuzz_unlistenToTransfers_2( + address listenerContract + ) public { + console.log( + "Should revert if listener contract wasn't listening to transfers" + ); + + // Expect revert + vm.expectRevert(bytes("L42")); + tested.unlistenToTransfers(listenerContract); + } + + function testFuzz_unlistenToTransfers_3( + address listenerContract + ) public { + console.log( + "Should revert if listener contract was already unlistening to transfers" + ); + + // Listen to transfers + tested.listenToTransfers(listenerContract); + + // Unlisten to transfers + tested.unlistenToTransfers(listenerContract); + + // Expect revert + vm.expectRevert(bytes("L42")); + tested.unlistenToTransfers(listenerContract); + } + + function testFuzz_unlistenToTransfers_3( + address listenerContract1, + address listenerContract2, + address listenerContract3 + ) public { + console.log( + "Should properly remove listener contract from array else and without leaving any empty slot" + ); + + // Ensure that 3 listeners addresses are different + vm.assume(listenerContract1 != listenerContract2); + vm.assume(listenerContract1 != listenerContract3); + vm.assume(listenerContract2 != listenerContract3); + + // Listen to transfers from 3 contracts + tested.listenToTransfers(listenerContract1); + tested.listenToTransfers(listenerContract2); + tested.listenToTransfers(listenerContract3); + + // Assert that the 3 contracts are listening to transfers + assertEq( + address(tested.transfersListeners(0)), + listenerContract1 + ); + assertEq( + address(tested.transfersListeners(1)), + listenerContract2 + ); + assertEq( + address(tested.transfersListeners(2)), + listenerContract3 + ); + + // Unlisten to transfers from contract2 + tested.unlistenToTransfers(listenerContract2); + + // Ensure that contract2 have been removed without leaving slot 1 empty + assertEq( + address(tested.transfersListeners(0)), + listenerContract1 + ); + assertEq( + address(tested.transfersListeners(1)), + listenerContract3 + ); + + // Also ensure that slot 2 doesn't exist anymore + vm.expectRevert(); + tested.transfersListeners(2); + } + + // =========================== + // === decimals() function === + function testFuzz_setFund_1(uint8 decimals) public { + console.log("Should mirror wrapped/underlying token decimals"); + + // Set underlying token decimals + underlyingToken.setDecimals(decimals); + + // Assert that L-Token contract mirrors those + assertEq(tested.decimals(), decimals); + } + + // ==================================== + // === unmintedRewardsOf() function === + // No tests needed as it simply proxies _rewardsOf() + // Low priority TODO: Add mirror tests for future safety + + // ================================ + // === realBalanceOf() function === + function testFuzz_realBalance_1( + uint16 aprUD7x3, + address account, + uint256 amount + ) public { + console.log("Should mirror changes in super.balanceOf"); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Assert that accounts are different, aren't zero address nor the contract address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Cap amount to [2, 100T] + amount = bound( + amount, + 2, + 100_000_000_000_000 * 10 ** underlyingToken.decimals() + ); + + // Give some L-Tokens to account1 + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + assertEq(tested.realBalanceOf(account), amount); + } + + // ============================ + // === balanceOf() function === + function testFuzz_balanceOf_1( + uint8 decimals, + uint256 amount + ) public { + console.log("Should mirror changes in realBalanceOf"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Cap amount to 100T + amount = bound(amount, 0, 100_000_000_000_000 * 10 ** decimals); + + // Assert the balance is currently 0 + assertEq(tested.balanceOf(address(1234)), 0); + + // Mint some L-Tokens to account + deal(address(tested), address(1234), amount, true); + + // Assert the balance is now equal to the minted amount + assertEq(tested.balanceOf(address(1234)), amount); + } + + function testFuzz_balanceOf_2( + uint8 decimals, + uint16 aprUD7x3, + uint256 depositedAmount, + uint256 duration + ) public { + console.log("Should mirror changes in unmintedRewardsOf"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Cap amount to 100T + depositedAmount = bound( + depositedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Cap duration to 1000 years + duration = bound(duration, 0, 1000 * 365 days); + + // Set APR + tested.setAPR(aprUD7x3); + + // Mint some underlying tokens to account and deposit them + deal( + address(underlyingToken), + address(1234), + depositedAmount, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Assert the balance is currently equal to the minted amount + assertEq(tested.balanceOf(address(1234)), depositedAmount); + + // Move forward duration in time + skip(duration); + + // Assert the balance is now equal to the minted amount + unclaimed rewards + assertEq( + tested.balanceOf(address(1234)), + depositedAmount + tested.unmintedRewardsOf(address(1234)) + ); + } + + // ================================== + // === realTotalSupply() function === + // No tests needed as it simply proxies super.totalSupply() + // Low priority TODO: Add mirror tests for future safety + + // ============================== + // === totalSupply() function === + function testFuzz_totalSupply_1(uint256 unclaimedFees) public { + console.log("Should mirror changes in unclaimed fees"); + + // Assert total supply is currently 0 + assertEq(tested.totalSupply(), 0); + + // Manually set unclaimed fees + tested.tool_rawSetUnclaimedFees(unclaimedFees); + + // Assert unclaimed fees are taken into account in total supply + assertEq(tested.totalSupply(), unclaimedFees); + } + + function testFuzz_totalSupply_2(uint256 totalQueued) public { + console.log("Should mirror changes in total queued"); + + // Assert total supply is currently 0 + assertEq(tested.totalSupply(), 0); + + // Manually set unclaimed fees + tested.tool_rawSetTotalQueued(totalQueued); + + // Assert unclaimed fees are taken into account in total supply + assertEq(tested.totalSupply(), totalQueued); + } + + function testFuzz_totalSupply_3( + uint8 decimals, + uint16 aprUD7x3, + uint256 depositedAmount, + uint256 withdrawnAmount + ) public { + console.log("Should mirror changes in real total supply"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Set withdrawal fees to 0 so it doesn't interfer in calculations + tested.setFeesRate(0); + + // Cap deposited amount to 100T + depositedAmount = bound( + depositedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure the withdrawn amount is never higher than the deposited amount + vm.assume(withdrawnAmount <= depositedAmount); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Assert total supply is currently 0 + assertEq(tested.totalSupply(), 0); + + // Deposit some underlying token (and so mint some L-Tokens) + deal( + address(underlyingToken), + address(1234), + depositedAmount, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Assert minted tokens are taken into account in total supply + assertEq(tested.totalSupply(), depositedAmount); + + // Withdraw some underlying token (and so burn some L-Tokens) + tested.instantWithdrawal(withdrawnAmount); + + // Assert burned tokens are taken into account in total supply + assertEq(tested.totalSupply(), depositedAmount - withdrawnAmount); + } + + // =============================== + // === recoverERC20() function === + function test_recoverERC20_1( + address account, + address tokenAddress, + uint256 recoveredAmount + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.recoverERC20(tokenAddress, recoveredAmount); + } + + function test_recoverERC20_2() public { + console.log( + "Should revert if trying to recover underlying token" + ); + vm.expectRevert(bytes("L43")); + tested.recoverERC20(address(underlyingToken), 0); + } + + function testFuzz_recoverERC20_3( + uint8 decimals, + uint16 aprUD7x3, + uint256 amount + ) public { + console.log("Should allow to recover L-Tokens"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first APR + tested.setAPR(aprUD7x3); + + // Cap deposited amount to 100T + amount = bound(amount, 1, 100_000_000_000_000 * 10 ** decimals); + + // Accidentally send some L-Tokens to L-Token contract itself + deal(address(underlyingToken), address(1234), amount, true); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + tested.transfer(address(tested), amount); + vm.stopPrank(); + + // Assert that the contract balance is now equal to the minted amount + assertEq(tested.balanceOf(address(tested)), amount); + + // Assert that owner balance is currently 0 + assertEq(tested.balanceOf(address(this)), 0); + + // Recover L-Tokens + tested.recoverERC20(address(tested), amount); + + // Assert that the contract balance is now 0 + assertEq(tested.balanceOf(address(tested)), 0); + + // Assert that owner balance is currently equal to the minted amount + assertEq(tested.balanceOf(address(this)), amount); + } + + function test_recoverERC20_4() public { + console.log("Shouldn't revert else"); + deal(address(anotherToken), address(tested), 1000); + tested.recoverERC20(address(anotherToken), 500); + } + + // ==================================== + // === recoverUnderlying() function === + function test_recoverUnderlying_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.recoverUnderlying(); + } + + function test_recoverUnderlying_2() public { + console.log("Should revert if there is nothing to recover"); + vm.expectRevert(bytes("L44")); + tested.recoverUnderlying(); + } + + function testFuzz_recoverUnderlying_3( + uint8 decimals, + uint16 aprUD7x3, + uint256 fundedAmount, + uint256 depositedAmount + ) public { + console.log( + "Shouldn't allow recovering underlying tokens deposited through deposit() or fund() functions" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 200% so it accepts deposited amount x 2 (as funded amount + // is capped to deposited amount) + tested.tool_setRetentionRate(uint32(200 * 10 ** 3)); + + // Bound deposited amount to [2, 1T] + depositedAmount = uint216( + bound(depositedAmount, 2, 100_000_000_000_000 * 10 ** decimals) + ); + + // Mint some underlying tokens to account and deposit them + deal( + address(underlyingToken), + address(1234), + depositedAmount, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Ensure funded amount is lower than deposited amount so repatriate() doesn't revert because of retention rate exceeded + fundedAmount = uint216(bound(fundedAmount, 1, depositedAmount)); + + // Fuel random amount of $LDY to contract + deal( + address(underlyingToken), + address(fundWallet), + fundedAmount, + true + ); + vm.startPrank(address(fundWallet)); + underlyingToken.approve(address(tested), fundedAmount); + tested.repatriate(fundedAmount); + vm.stopPrank(); + + // Expect the function to consider there is nothing to recover + vm.expectRevert(bytes("L44")); + tested.recoverUnderlying(); + } + + function testFuzz_recoverUnderlying_4( + uint8 decimals, + uint256 recoverableAmount + ) public { + console.log("Should transfer recoverable tokens to owner else"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure recovered and recoverable is greater than 0 + vm.assume(recoverableAmount > 0); + + // Mint a random number of underlying to L-Token contract + deal( + address(underlyingToken), + address(tested), + recoverableAmount, + true + ); + + // Assert that owner balance is currently 0 + assertEq(underlyingToken.balanceOf(address(this)), 0); + + // Recover random amount of tokens + tested.recoverUnderlying(); + + // Check that recovered amount is now in owner balance + assertEq( + underlyingToken.balanceOf(address(this)), + recoverableAmount + ); + } + + // ===================================== + // === _distributeRewards() function === + function test__distributeRewards_1( + uint16 aprUD7x3, + address account, + uint256 amount + ) public { + console.log("Should return true meaning it is implemented"); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + + assertEq(tested.public_distributeRewards(account, amount), true); + } + + function test__distributeRewards_2( + uint16 aprUD7x3, + uint256 amount + ) public { + console.log("Should revert if given account is zero address"); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Expect revert + vm.expectRevert(bytes("ERC20: mint to the zero address")); + tested.public_distributeRewards(address(0), amount); + } + + function test__distributeRewards_3( + uint16 aprUD7x3, + address account, + uint256 amount + ) public { + console.log("Should mint given amount to given account"); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Cap amount to 100T + amount = bound( + amount, + 0, + 100_000_000_000_000 * 10 ** underlyingToken.decimals() + ); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + + // Assert that account balance is currently 0 + assertEq(tested.balanceOf(account), 0); + + // Claim rewards of account + tested.public_distributeRewards(account, amount); + + // Assert that account balance is now equal to the claimed amount + assertEq(tested.balanceOf(account), amount); + } + + // ======================================= + // === _beforeTokenTransfer() function === + function testFuzz_beforeTokenTransfer_1( + address from, + address to, + uint256 amount + ) public { + console.log("Should prevent transfer when contract is paused"); + globalPause.pause(); + expectRevertPaused(); + tested.public_beforeTokenTransfer(from, to, amount); + } + + function testFuzz_beforeTokenTransfer_2( + uint16 aprUD7x3, + address from, + address to, + uint256 amount, + bool fromBlacklisted, + bool toBlacklisted + ) public { + console.log( + "Should prevent transfer when one or both addresses are blacklisted" + ); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure from and to addresses are different and not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Randomly blacklist from address + if (fromBlacklisted) globalBlacklist.blacklist(from); + + // Randomly blacklist to address + if (toBlacklisted) globalBlacklist.blacklist(to); + + // Expect revert if one or both addresses are blacklisted + if (fromBlacklisted || toBlacklisted) expectRevertRestricted(); + tested.public_beforeTokenTransfer(from, to, amount); + } + + function testFuzz__beforeTokenTransfer_3( + uint8 decimals, + uint16 aprUD7x3, + address from, + address to, + uint256 amount, + uint256 duration + ) public { + console.log( + "Should reset from and to accounts investment periods if they are not zero address" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Cap amount to 100T + amount = bound(amount, 0, 100_000_000_000_000 * 10 ** decimals); + + // Cap duration to 1000 years + duration = bound(duration, 0, 1000 * 365 days); + + // Move forward a random duration + skip(duration); + + // Call before token transfer tokens + tested.public_beforeTokenTransfer(from, to, amount); + + // Ensure that the investment periods timestamp have been updated to now + if (from != address(0)) { + assertEq( + tested.public_accountsInfos(from).period.timestamp, + block.timestamp + ); + } + if (to != address(0)) { + assertEq( + tested.public_accountsInfos(to).period.timestamp, + block.timestamp + ); + } + } + + // ====================================== + // === _afterTokenTransfer() function === + function testFuzz_afterTokenTransfer_1( + uint16 aprUD7x3, + address account1, + address account2, + uint256 amount + ) public { + console.log( + "Should properly call onLTokenTransfer() of all transfers listeners" + ); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Assert that accounts are different, aren't zero address nor the contract address + vm.assume(account1 != account2); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account1 != address(tested)); + vm.assume(account2 != address(tested)); + + // Listen to transfers from vault1 and vault2 + tested.listenToTransfers(address(vault1)); + tested.listenToTransfers(address(vault2)); + + // Cap amount to [2, 100T] + amount = bound( + amount, + 2, + 100_000_000_000_000 * 10 ** underlyingToken.decimals() + ); + + // Give some L-Tokens to account1 + deal(address(underlyingToken), account1, amount, true); + vm.startPrank(account1); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + assertEq(tested.balanceOf(account1), amount); + + // Perform 3 transactions + vm.prank(account1); + tested.transfer(account2, amount); + vm.prank(account2); + tested.transfer(account1, 1); + vm.prank(account2); + tested.transfer(account1, amount - 1); + + // Assert that transactions have been successfully recorded in vault 1 + address dataFrom; + address dataTo; + uint256 dataAmount; + (dataFrom, dataTo, dataAmount) = vault1.hookData(0); + assertEq(dataFrom, address(0)); + assertEq(dataTo, account1); + assertEq(dataAmount, amount); + (dataFrom, dataTo, dataAmount) = vault1.hookData(1); + assertEq(dataFrom, account1); + assertEq(dataTo, account2); + assertEq(dataAmount, amount); + (dataFrom, dataTo, dataAmount) = vault1.hookData(2); + assertEq(dataFrom, account2); + assertEq(dataTo, account1); + assertEq(dataAmount, 1); + (dataFrom, dataTo, dataAmount) = vault1.hookData(3); + assertEq(dataFrom, account2); + assertEq(dataTo, account1); + assertEq(dataAmount, amount - 1); + + // Assert that transactions have been successfully recorded in vault 2 + (dataFrom, dataTo, dataAmount) = vault2.hookData(0); + assertEq(dataFrom, address(0)); + assertEq(dataTo, account1); + assertEq(dataAmount, amount); + (dataFrom, dataTo, dataAmount) = vault2.hookData(1); + assertEq(dataFrom, account1); + assertEq(dataTo, account2); + assertEq(dataAmount, amount); + (dataFrom, dataTo, dataAmount) = vault2.hookData(2); + assertEq(dataFrom, account2); + assertEq(dataTo, account1); + assertEq(dataAmount, 1); + (dataFrom, dataTo, dataAmount) = vault2.hookData(3); + assertEq(dataFrom, account2); + assertEq(dataTo, account1); + assertEq(dataAmount, amount - 1); + } + + // ====================================== + // === getExpectedRetained() function === + function testFuzz_getExpectedRetained_1( + uint8 decimals, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 totalSupply + ) public { + console.log("Should properly apply retention rate"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 2, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure the retention rate is >0 and <=10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + // Set retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap totalSupply to 1000T + // Make it >1 to prevent assertion revert because of precision loss on small numbers + // +10000 is used to prevent assertion revert with small decimals values + totalSupply = bound( + totalSupply, + 1 * 10 ** decimals + 10000, + 100_000_000_000_000 * 10 ** decimals + ); + + // Apply total supply by depositing same amount of underlying tokens + deal(address(underlyingToken), address(1234), totalSupply, true); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), totalSupply); + tested.deposit(totalSupply, ""); + vm.stopPrank(); + + // Ensure that total supply is successfully applied + assertEq(tested.totalSupply(), totalSupply); + + // Get expected retained + uint256 expectedRetained = tested.getExpectedRetained(); + + // Obtain retention rate from total supply and expected retained + uint256 totalSupplySUD = SUD.fromAmount(totalSupply, decimals); + uint256 expectedRetainedSUD = SUD.fromAmount( + expectedRetained, + decimals + ); + uint256 retentionRateSUD = (expectedRetainedSUD * + SUD.fromInt(100, decimals)) / totalSupplySUD; + uint256 expectedRetentionRateUD7x3 = SUD.toRate( + retentionRateSUD, + decimals + ); + + // Compute difference between expected retention rate and actual retention rate + uint256 difference = expectedRetentionRateUD7x3 > + retentionRateUD7x3 + ? expectedRetentionRateUD7x3 - retentionRateUD7x3 + : retentionRateUD7x3 - expectedRetentionRateUD7x3; + + // Assert that the difference is lower than 0.01% + assertTrue(difference <= 10); + } + + function testFuzz_getExpectedRetained_2( + uint8 decimals, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 totalSupply + ) public { + console.log("Should properly apply total supply"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure the retention rate is >0 and <=10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 1, 10 * 10 ** 3) + ); + + // Set retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap totalSupply to 100T + // Make it >1 to prevent assertion revert because of precision loss on small numbers + totalSupply = bound( + totalSupply, + 1 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Apply total supply by depositing same amount of underlying tokens + deal(address(underlyingToken), address(1234), totalSupply, true); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), totalSupply); + tested.deposit(totalSupply, ""); + vm.stopPrank(); + + // Ensure that total supply is successfully applied + assertEq(tested.totalSupply(), totalSupply); + + // Get expected retained + uint256 expectedRetained = tested.getExpectedRetained(); + + // Obtain expected total supply from retention rate and expected retained + uint256 retentionRateSUD = SUD.fromRate( + retentionRateUD7x3, + decimals + ); + uint256 expectedRetainedSUD = SUD.fromAmount( + expectedRetained, + decimals + ); + uint256 totalSupplySUD = (expectedRetainedSUD * + SUD.fromInt(100, decimals)) / retentionRateSUD; + uint256 expectedTotalSupply = SUD.toAmount( + totalSupplySUD, + decimals + ); + + // Compute difference between expected retention rate and actual retention rate + uint256 difference = expectedTotalSupply > totalSupply + ? expectedTotalSupply - totalSupply + : totalSupply - expectedTotalSupply; + + // Assert that the difference is lower than 1 unit + // +100000 is used to prevent assertion revert with small decimals values + assertTrue(difference <= 1 * 10 ** decimals + 100000); + } + + // =========================================== + // === _transferExceedingToFund() function === + function testFuzz_transferExceedingToFund_1( + uint8 decimals, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Shouldn't transfer anything if there is no exceeding fund" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure the retention rate is >0 and <=10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 1, 10 * 10 ** 3) + ); + + // Set retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap totalSupply to 1000T and make it >1 to prevent assertion revert because of precision loss on small numbers + depositedAmount = bound( + depositedAmount, + 1 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount + deal( + address(underlyingToken), + address(1234), + depositedAmount, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Store current fund and L-Token contract balances for later comparison + uint256 oldFundBalance = underlyingToken.balanceOf( + address(fundWallet) + ); + uint256 oldLTokenBalance = underlyingToken.balanceOf( + address(tested) + ); + + // Call transferExceedingToFund() + tested.public_transferExceedingToFund(); + + // Expect L-Token contract and fund wallet balances to don't change as the previous call to deposit() already transfered exceeding underlying tokens to fund wallet + assertEq( + underlyingToken.balanceOf(address(fundWallet)), + oldFundBalance + ); + assertEq( + underlyingToken.balanceOf(address(tested)), + oldLTokenBalance + ); + } + + function testFuzz_transferExceedingToFund_2( + uint8 decimals, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount + ) public { + console.log("Should properly transfer the exceeding amount"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure the retention rate is >0 and <=10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 1, 10 * 10 ** 3) + ); + + // Set retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Ensure deposited amount is greater than 10k units + // 12k is used instead of 10k to prevent assertion revert because of precision loss on small numbers + depositedAmount = bound( + depositedAmount, + 12_000 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount + // This will implicitly call _transferExceedingToFund() + deal( + address(underlyingToken), + address(1234), + depositedAmount, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Expect balance of underlying from being equal to expect retained + assertEq( + underlyingToken.balanceOf(address(tested)), + tested.getExpectedRetained() + ); + } + + function testFuzz_transferExceedingToFund_3( + uint8 decimals, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Should decrease usableUnderlyings state by the amount of transfered exceeding funds" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set a first random APR + tested.setAPR(aprUD7x3); + + // Ensure the retention rate is >0 and <=10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 1, 10 * 10 ** 3) + ); + + // Set retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Ensure deposited amount is greater than 10k units + // 12k is used instead of 10k to prevent assertion revert because of precision loss on small numbers + depositedAmount = bound( + depositedAmount, + 12_000 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount + // This will implicitly call _transferExceedingToFund() + deal( + address(underlyingToken), + address(1234), + depositedAmount, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Expect balance of underlying from being equal to expect retained + assertEq( + tested.usableUnderlyings(), + tested.getExpectedRetained() + ); + } + + // ============================= + // === withdrawTo() function === + function testFuzz_withdrawTo_1( + address account, + uint256 amount + ) public { + console.log("Should inconditionally revert"); + vm.expectRevert(bytes("L45")); + tested.withdrawTo(account, amount); + } + + // ============================= + // === depositFor() function === + function testFuzz_depositFor_1( + address account, + uint256 amount + ) public { + console.log("Should inconditionally revert"); + vm.expectRevert(bytes("L46")); + tested.depositFor(account, amount); + } + + // ========================== + // === deposit() function === + function testFuzz_deposit_1( + address account, + uint256 amount + ) public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(account); + tested.deposit(amount, ""); + } + + function testFuzz_deposit_2( + address account, + uint256 amount + ) public { + console.log("Should revert if account is blacklisted"); + // Ensure account is not the zero address + vm.assume(account != address(0)); + + // Blacklist account + globalBlacklist.blacklist(account); + + // Expect revert + expectRevertRestricted(); + vm.prank(account); + tested.deposit(amount, ""); + } + + function testFuzz_deposit_3( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 accountBalance, + uint256 depositedAmount + ) public { + console.log( + "Should revert if account hasn't enough underlying tokens" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 2, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure account balance is lower than deposited amount + accountBalance = bound(accountBalance, 1, depositedAmount - 1); + + // Mint underlying tokens to account + deal(address(underlyingToken), account, accountBalance, true); + vm.startPrank(account); + + // Expect revert when trying to deposit more than account balance + underlyingToken.approve(address(tested), depositedAmount); + vm.expectRevert(bytes("L47")); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + } + + function testFuzz_deposit_4( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 depositedAmount + ) public { + console.log( + "Should decrease caller underlying balance and increase contract one by the amount of deposited underlying tokens" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Mint underlying tokens to account + deal(address(underlyingToken), account, depositedAmount, true); + + // Store old underlying token balances for later comparison + uint256 oldAccountBalance = underlyingToken.balanceOf(account); + uint256 oldContractBalance = underlyingToken.balanceOf( + address(tested) + ); + + // Deposit underlying tokens + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Assert that the account balance has decreased by the deposited amount + assertEq( + underlyingToken.balanceOf(account), + oldAccountBalance - depositedAmount + ); + + // Assert that the contract balance has increased by the deposited amount + assertEq( + underlyingToken.balanceOf(address(tested)), + oldContractBalance + depositedAmount + ); + } + + function testFuzz_deposit_5( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 depositedAmount + ) public { + console.log( + "Should mint new L-Tokens to the caller in a 1:1 ratio" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Mint underlying tokens to account + deal(address(underlyingToken), account, depositedAmount, true); + + // Store old account L-Token balance for later comparison + uint256 oldAccountBalance = tested.balanceOf(account); + + // Deposit underlying tokens + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Assert that the account balance has increased by the deposited amount + assertEq( + tested.balanceOf(account), + oldAccountBalance + depositedAmount + ); + } + + function testFuzz_deposit_6( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 depositedAmount + ) public { + console.log( + "Should increase usableUnderlying state by the amount of deposited underlying tokens" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Mint underlying tokens to account + deal(address(underlyingToken), account, depositedAmount, true); + + // Store old usableUnderlying state for later comparison + uint256 oldUsableUnderlying = tested.usableUnderlyings(); + + // Deposit underlying tokens + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Assert that the usableUnderlying state has increased by the deposited amount + assertEq( + tested.usableUnderlyings(), + oldUsableUnderlying + depositedAmount + ); + } + + function testFuzz_deposit_7( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 depositedAmount, + uint32 retentionRateUD7x3 + ) public { + console.log("Should transfer exceeding to fund"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Bound retention rate to [0, 10%] + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + // Set random retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Ensure deposited amount is greater than 10k units + // 12k is used instead of 10k to prevent assertion revert because of precision loss on small numbers + depositedAmount = bound( + depositedAmount, + 12_000 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying tokens + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Assert that no matter the deposited amount, the usable underlyings are always lower or equal than expected retained + assertTrue( + tested.usableUnderlyings() <= tested.getExpectedRetained() + ); + } + + // ============================================ + // === getWithdrawnAmountAndFees() function === + function testFuzz_getWithdrawnAmountAndFees_1( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 amount, + uint32 feesRateUD7x3, + uint216 tier2Amount + ) public { + console.log( + "Should always return [inputAmount, 0] if account is elligble to staking tier 2" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address nor the the underlying token contract + vm.assume(account != address(0)); + vm.assume(account != address(underlyingToken)); + vm.assume(account != address(ldyToken)); + + // Set first random APR on L-Token contract + tested.setAPR(aprUD7x3); + + // Set first random APR on LDYStaking contract + // ldyStaking.setAPR(aprUD7x3); + + // Cap fees rate to 100% + feesRateUD7x3 = uint32(bound(feesRateUD7x3, 0, 100 * 10 ** 3)); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap tier2Amount to 100T + tier2Amount = uint216( + bound( + tier2Amount, + 1000, + 100_000_000_000_000 * 10 ** ldyToken.decimals() + ) + ); + + // Set random tier 2 amount + // ldyStaking.setTier(2, tier2Amount); + + // Deposit enough $LDY tokens to be eligible to tier 2 + deal(address(ldyToken), account, tier2Amount, true); + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), tier2Amount); + ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration + vm.stopPrank(); + + // Get withdraw amount and fees + (uint256 withdrawnAmount, uint256 fees) = tested + .getWithdrawnAmountAndFees(account, amount); + + // Expect withdrawn amount to be equal to input amount + assertEq(withdrawnAmount, amount); + + // Expect fees to be 0 + assertEq(fees, 0); + } + + function testFuzz_getWithdrawnAmountAndFees_2( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 amount, + uint32 feesRateUD7x3 + ) public { + console.log("Should else return [inputAmount - fees, fees]"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address nor the the underlying token contract + vm.assume(account != address(0)); + vm.assume(account != address(underlyingToken)); + + // Set first random APR on L-Token contract + tested.setAPR(aprUD7x3); + + // Cap fees rate to 100% + feesRateUD7x3 = uint32(bound(feesRateUD7x3, 0, 100 * 10 ** 3)); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount to 100T + amount = bound(amount, 1, 100_000_000_000_000 * 10 ** decimals); + + // Get withdraw amount and fees + (uint256 withdrawnAmount, uint256 fees) = tested + .getWithdrawnAmountAndFees(account, amount); + + // Assert that the withdrawn amount is equal to the input amount minus the fees + assertEq(withdrawnAmount, amount - fees); + } + + function testFuzz_getWithdrawnAmountAndFees_3( + uint8 decimals, + uint16 aprUD7x3, + address account, + uint256 amount, + uint32 feesRateUD7x3 + ) public { + console.log("Should properly apply feesRateUD7x3"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address nor the the underlying token contract + vm.assume(account != address(0)); + vm.assume(account != address(underlyingToken)); + + // Set first random APR on L-Token contract + tested.setAPR(aprUD7x3); + + // Cap fees rate to 100% and to a minimum of 0.1% to prevent below assertion revert because of precision loss + feesRateUD7x3 = uint32(bound(feesRateUD7x3, 100, 100 * 10 ** 3)); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount to 100T and to a minimum of one unit to prevent below assertion revert because of precision loss + // +10000 is used to prevent assertion revert with small decimals values + amount = bound( + amount, + 1 * 10 ** decimals + 10000, + 100_000_000_000_000 * 10 ** decimals + ); + + // Get withdraw amount and fees + (, uint256 fees) = tested.getWithdrawnAmountAndFees( + account, + amount + ); + + // Obtain applied feesRateUD7x3 from input amount and fees amount + uint256 feesRateSUD = (SUD.fromAmount(fees, decimals) * + SUD.fromInt(100, decimals)) / SUD.fromAmount(amount, decimals); + uint256 appliedFeesRateUD7x3 = SUD.toRate(feesRateSUD, decimals); + + // Compute difference between applied fees rate and expected fees rate + uint256 difference = appliedFeesRateUD7x3 > feesRateUD7x3 + ? appliedFeesRateUD7x3 - feesRateUD7x3 + : feesRateUD7x3 - appliedFeesRateUD7x3; + + // Assert that the difference is < 0.01% + assertTrue(difference <= 10); + } + + // ================================== + // === instantWithdrawal() function === + function testFuzz_instantWithdrawal_1( + address account, + uint256 amount + ) public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(account); + tested.instantWithdrawal(amount); + } + + function testFuzz_instantWithdrawal_2( + address account, + uint256 amount + ) public { + console.log("Should revert if account is blacklisted"); + // Ensure account is not the zero address + vm.assume(account != address(0)); + + // Blacklist account + globalBlacklist.blacklist(account); + + // Expect revert + expectRevertRestricted(); + vm.prank(account); + tested.instantWithdrawal(amount); + } + + function testFuzz_instantWithdrawal_3( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount, + uint256 depositedAmount + ) public { + console.log( + "Should revert if account hasn't enough underlying tokens to withdraw" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requestedAmount to 100T + requestedAmount = bound( + requestedAmount, + 2, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure depositedAmounte is lower than requestedAmount + depositedAmount = bound(depositedAmount, 1, requestedAmount - 1); + + // Deposit underlying token amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Expect revert when trying to withdraw more than deposited amount + vm.expectRevert(bytes("L48")); + tested.instantWithdrawal(requestedAmount); + vm.stopPrank(); + } + + function testFuzz_instantWithdrawal_4( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount, + uint256 queuedAmount + ) public { + console.log( + "Should revert if account is not elligible to staking tier 2 and contract doesn't hold enough underlying tokens to cover the withdrawal + all already queued withdrawals" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Ensure total queued is greater than 0 and capped to 100T + queuedAmount = bound( + queuedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Force set total queued amount + tested.tool_rawSetTotalQueued(queuedAmount); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Expect revert when because of insufficient funds available + vm.expectRevert(bytes("L49")); + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + } + + function testFuzz_instantWithdrawal_5( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 queuedAmount, + uint216 tier2Amount + ) public { + console.log( + "Should revert if account is to staking tier 2 and contract doesn't hold enough underlying tokens to cover the current withdrawal" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Set first random APR on LDYStaking contract + // ldyStaking.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Ensure total queued is greater than 0 and capped to 100T + queuedAmount = bound( + queuedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Force set total queued amount + tested.tool_rawSetTotalQueued(queuedAmount); + + // Cap tier2Amount to 100T + tier2Amount = uint216( + bound( + tier2Amount, + 1000, + 100_000_000_000_000 * 10 ** ldyToken.decimals() + ) + ); + + // // Set random tier 2 amount + // ldyStaking.setTier(2, tier2Amount); + + // Deposit enough $LDY tokens to be eligible to tier 2 + deal(address(ldyToken), account, tier2Amount, true); + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), tier2Amount); + ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration + vm.stopPrank(); + + // Assert account is eligible to tier 2 + assertGe(ldyStaking.tierOf(account), 2); + + // Deposit underlying token amount + deal(address(underlyingToken), account, tier2Amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), tier2Amount); + tested.deposit(tier2Amount, ""); + vm.stopPrank(); + + // Burn some contract reserves so it will not be able to cover the withdrawal + vm.prank(address(tested)); + underlyingToken.transfer(address(1234), 1); + tested.tool_rawSetUsableUnderlyings( + tested.usableUnderlyings() - 1 + ); + + // Expect revert when because of insufficient funds available + vm.expectRevert(bytes("L49")); + vm.prank(account); + tested.instantWithdrawal(tier2Amount); + } + + function testFuzz_instantWithdrawal_6( + uint8 decimals, + address account1, + address account2, + uint16 aprUD7x3, + uint256 depositedAmount, + uint256 queuedAmount + ) public { + console.log( + "Should process to withdrawal if account is not elligible to staking tier 2 but contract holds enough underlying tokens to cover the withdrawal + all already queued withdrawals" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account1 != address(0)); + vm.assume(account1 != address(tested)); + vm.assume(account2 != address(0)); + vm.assume(account2 != address(tested)); + vm.assume(account1 != account2); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Ensure total queued is ceiled to uint96 max (the max amount that can be requested at once) + queuedAmount = bound(queuedAmount, 1, type(uint96).max); + + // Deposit queued amount and queue it + deal(address(underlyingToken), account1, queuedAmount, true); + uint256 processingFees = 0.003 ether; + deal(account1, processingFees); + vm.startPrank(account1); + underlyingToken.approve(address(tested), queuedAmount); + tested.deposit(queuedAmount, ""); + tested.requestWithdrawal{ value: processingFees }(queuedAmount); + vm.stopPrank(); + + // Assert that total queued is equal to queud amount + assertEq(tested.totalQueued(), queuedAmount); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account2, depositedAmount, true); + vm.startPrank(account2); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Assert that account2 L-Token balance is equal to deposited amount + assertEq(tested.balanceOf(account2), depositedAmount); + + // Assert that account2 underlying token balance is equal to 0 + assertEq(underlyingToken.balanceOf(account2), 0); + + // Proceed to instant withdraw + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assert that account2 L-Token balance is equal to 0 + assertEq(tested.balanceOf(account2), 0); + + // Assert that account2 underlying token balance is equal to deposited amount minus fees + (, uint256 fees) = tested.getWithdrawnAmountAndFees( + account2, + depositedAmount + ); + assertEq( + underlyingToken.balanceOf(account2), + depositedAmount - fees + ); + } + + function testFuzz_instantWithdrawal_7( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 queuedAmount, + uint216 tier2Amount + ) public { + console.log( + "Should process to withdraw if account is to staking tier 2 and contract holds enough underlying tokens to cover the current withdrawal" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Set first random APR on LDYStaking contract + // ldyStaking.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Ensure total queued is greater than 0 and capped to 100T + queuedAmount = bound( + queuedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Force set total queued amount + tested.tool_rawSetTotalQueued(queuedAmount); + + // Cap tier2Amount to 100T + tier2Amount = uint216( + bound(tier2Amount, 1000, 100_000_000_000_000 * 10 ** decimals) + ); + + // // Set random tier 2 amount + // ldyStaking.setTier(2, tier2Amount); + + // Deposit enough $LDY tokens to be eligible to tier 2 + deal(address(ldyToken), account, tier2Amount, true); + vm.startPrank(account); + ldyToken.approve(address(ldyStaking), tier2Amount); + ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration + vm.stopPrank(); + + // Assert account is eligible to tier 2 + assertGe(ldyStaking.tierOf(account), 2); + + // Deposit underlying token amount + deal(address(underlyingToken), account, tier2Amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), tier2Amount); + tested.deposit(tier2Amount, ""); + + // Assert that account2 L-Token balance is equal to deposited amount + assertEq(tested.balanceOf(account), tier2Amount); + + // Assert that account2 underlying token balance is equal to 0 + assertEq(underlyingToken.balanceOf(account), 0); + + // Withdraw underlying tokens + tested.instantWithdrawal(tier2Amount); + vm.stopPrank(); + + // Assert that account2 underlying token balance is equal to deposited + assertEq(underlyingToken.balanceOf(account), tier2Amount); + } + + function testFuzz_instantWithdrawal_8( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log("Should properly apply feesRateUD7x3"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Proceed to instant withdraw + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assert the account underlying balance is equal to deposited amount minus fees + (, uint256 fees) = tested.getWithdrawnAmountAndFees( + account, + depositedAmount + ); + assertEq( + underlyingToken.balanceOf(account), + depositedAmount - fees + ); + } + + function testFuzz_instantWithdrawal_9( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Should decrease usableUnderlying by withdrawn amount (and not input amount)" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Store old usableUnderlying state for later comparison + uint256 oldUsableUnderlying = tested.usableUnderlyings(); + + // Proceed to instant withdraw + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assert that the usableUnderlying state has decreased by the withdrawn amount + (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees( + account, + depositedAmount + ); + assertEq( + tested.usableUnderlyings(), + oldUsableUnderlying - withdrawnAmount + ); + } + + function testFuzz_instantWithdrawal_10( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Should also burn fees and so realTotalSupply should decrease by input amount" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so it doesn't interfer in calculations + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap depositedAmount to 100T + depositedAmount = bound( + depositedAmount, + 1, + 100_000_000_000_000 * 10 ** decimals + ); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + + // Store old realTotalSupply state for later comparison + uint256 oldRealTotalSupply = tested.realTotalSupply(); + + // Proceed to instant withdraw + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assert that the realTotalSupply state has decreased by the input amount + assertEq( + tested.realTotalSupply(), + oldRealTotalSupply - depositedAmount + ); + } + + // ====================================== + // === processQueuedRequests() function === + function testFuzz_processQueuedRequests_1(address account) public { + console.log("Should revert if not called by withdrawer wallet"); + + // Ensure the random account is not the withdrawer wallet + vm.assume(account != withdrawerWallet); + + // Expect revert + vm.expectRevert(bytes("L39")); + vm.prank(account); + tested.processQueuedRequests(); + } + + function test_processQueuedRequests_2() public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + } + + function testFuzz_processQueuedRequests_3() public { + console.log("Should not change any state if queue is empty"); + + // Store old states for later comparison + uint256 oldUsableUnderlying = tested.usableUnderlyings(); + uint256 oldUnclaimedFees = tested.unclaimedFees(); + uint256 oldTotalQueued = tested.totalQueued(); + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert that states haven't changed + assertEq(tested.usableUnderlyings(), oldUsableUnderlying); + assertEq(tested.unclaimedFees(), oldUnclaimedFees); + assertEq(tested.totalQueued(), oldTotalQueued); + } + + function testFuzz_processQueuedRequests_4( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint256 requestAmount, + uint160 accountBase, + uint8 randomEmptySeed + ) public { + console.log( + "Should silently skip empty requests (processed big requests)" + ); + // Set random underlying token decimals in [0, 18] + + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once + requestAmount = bound(requestAmount, 1, type(uint96).max); + + // Cap amount of requests to 30 + numberOfRequests = uint8(bound(numberOfRequests, 5, 30)); + + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Get the interval of empty requests + uint256 emptyInterval = bound(randomEmptySeed, 1, 5); + + // Create random number of requests, and blacklist some of them + uint256 numberOfNonEmptyRequests; + for (uint8 id = 0; id < numberOfRequests; id++) { + // Obtain account address + address account = address(accountBase + id); + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Randomly create an empty request + if (id % emptyInterval == 0) { + // Simulate processed big request in queue + tested.tool_simulateProcessedBigRequestInQueue(); + + // Assert that the request index indeed holds an empty request now + (address _requestAccount, uint256 _requestAmount) = tested + .withdrawalQueue(id); + assertEq(_requestAccount, address(0)); + assertEq(_requestAmount, 0); + } + // Else create a normal request + else { + // Increment non-empty requests counts + numberOfNonEmptyRequests++; - // Assert that contract 1 is at the end of the array - assertEq(address(tested.transfersListeners(0)), listenersContract1); - - // Listen to transfers from contract 2 - tested.listenToTransfers(listenerContract2); - - // Assert that contract 2 is now at the end of the array - assertEq(address(tested.transfersListeners(1)), listenerContract2); - } - - // ==================================== - // === unlistenToTransfers() function === - function testFuzz_unlistenToTransfers_1(address account, address listenerContract) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.unlistenToTransfers(listenerContract); - } - - function testFuzz_unlistenToTransfers_2(address listenerContract) public { - console.log("Should revert if listener contract wasn't listening to transfers"); - - // Expect revert - vm.expectRevert(bytes("L42")); - tested.unlistenToTransfers(listenerContract); - } - - function testFuzz_unlistenToTransfers_3(address listenerContract) public { - console.log("Should revert if listener contract was already unlistening to transfers"); - - // Listen to transfers - tested.listenToTransfers(listenerContract); - - // Unlisten to transfers - tested.unlistenToTransfers(listenerContract); - - // Expect revert - vm.expectRevert(bytes("L42")); - tested.unlistenToTransfers(listenerContract); - } - - function testFuzz_unlistenToTransfers_3( - address listenerContract1, - address listenerContract2, - address listenerContract3 - ) public { - console.log( - "Should properly remove listener contract from array else and without leaving any empty slot" - ); - - // Ensure that 3 listeners addresses are different - vm.assume(listenerContract1 != listenerContract2); - vm.assume(listenerContract1 != listenerContract3); - vm.assume(listenerContract2 != listenerContract3); - - // Listen to transfers from 3 contracts - tested.listenToTransfers(listenerContract1); - tested.listenToTransfers(listenerContract2); - tested.listenToTransfers(listenerContract3); - - // Assert that the 3 contracts are listening to transfers - assertEq(address(tested.transfersListeners(0)), listenerContract1); - assertEq(address(tested.transfersListeners(1)), listenerContract2); - assertEq(address(tested.transfersListeners(2)), listenerContract3); - - // Unlisten to transfers from contract2 - tested.unlistenToTransfers(listenerContract2); - - // Ensure that contract2 have been removed without leaving slot 1 empty - assertEq(address(tested.transfersListeners(0)), listenerContract1); - assertEq(address(tested.transfersListeners(1)), listenerContract3); - - // Also ensure that slot 2 doesn't exist anymore - vm.expectRevert(); - tested.transfersListeners(2); - } - - // =========================== - // === decimals() function === - function testFuzz_setFund_1(uint8 decimals) public { - console.log("Should mirror wrapped/underlying token decimals"); - - // Set underlying token decimals - underlyingToken.setDecimals(decimals); - - // Assert that L-Token contract mirrors those - assertEq(tested.decimals(), decimals); - } - - // ==================================== - // === unmintedRewardsOf() function === - // No tests needed as it simply proxies _rewardsOf() - // Low priority TODO: Add mirror tests for future safety - - // ================================ - // === realBalanceOf() function === - function testFuzz_realBalance_1(uint16 aprUD7x3, address account, uint256 amount) public { - console.log("Should mirror changes in super.balanceOf"); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Assert that accounts are different, aren't zero address nor the contract address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Cap amount to [2, 100T] - amount = bound(amount, 2, 100_000_000_000_000 * 10 ** underlyingToken.decimals()); - - // Give some L-Tokens to account1 - deal(address(underlyingToken), account, amount, true); + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, requestAmount, true); vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - assertEq(tested.realBalanceOf(account), amount); - } - - // ============================ - // === balanceOf() function === - function testFuzz_balanceOf_1(uint8 decimals, uint256 amount) public { - console.log("Should mirror changes in realBalanceOf"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Assert the balance is currently 0 - assertEq(tested.balanceOf(address(1234)), 0); - - // Mint some L-Tokens to account - deal(address(tested), address(1234), amount, true); - - // Assert the balance is now equal to the minted amount - assertEq(tested.balanceOf(address(1234)), amount); - } - - function testFuzz_balanceOf_2( - uint8 decimals, - uint16 aprUD7x3, - uint256 depositedAmount, - uint256 duration - ) public { - console.log("Should mirror changes in unmintedRewardsOf"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Cap amount to 100T - depositedAmount = bound(depositedAmount, 0, 100_000_000_000_000 * 10 ** decimals); + underlyingToken.approve(address(tested), requestAmount); + tested.deposit(requestAmount, ""); - // Cap duration to 1000 years - duration = bound(duration, 0, 1000 * 365 days); - - // Set APR - tested.setAPR(aprUD7x3); - - // Mint some underlying tokens to account and deposit them - deal(address(underlyingToken), address(1234), depositedAmount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Assert the balance is currently equal to the minted amount - assertEq(tested.balanceOf(address(1234)), depositedAmount); - - // Move forward duration in time - skip(duration); - - // Assert the balance is now equal to the minted amount + unclaimed rewards - assertEq( - tested.balanceOf(address(1234)), - depositedAmount + tested.unmintedRewardsOf(address(1234)) + // Queue request + tested.requestWithdrawal{ value: processingFees }( + requestAmount ); - } - - // ================================== - // === realTotalSupply() function === - // No tests needed as it simply proxies super.totalSupply() - // Low priority TODO: Add mirror tests for future safety - - // ============================== - // === totalSupply() function === - function testFuzz_totalSupply_1(uint256 unclaimedFees) public { - console.log("Should mirror changes in unclaimed fees"); - - // Assert total supply is currently 0 - assertEq(tested.totalSupply(), 0); - - // Manually set unclaimed fees - tested.tool_rawSetUnclaimedFees(unclaimedFees); - - // Assert unclaimed fees are taken into account in total supply - assertEq(tested.totalSupply(), unclaimedFees); - } - - function testFuzz_totalSupply_2(uint256 totalQueued) public { - console.log("Should mirror changes in total queued"); - - // Assert total supply is currently 0 - assertEq(tested.totalSupply(), 0); - - // Manually set unclaimed fees - tested.tool_rawSetTotalQueued(totalQueued); - - // Assert unclaimed fees are taken into account in total supply - assertEq(tested.totalSupply(), totalQueued); - } - - function testFuzz_totalSupply_3( - uint8 decimals, - uint16 aprUD7x3, - uint256 depositedAmount, - uint256 withdrawnAmount - ) public { - console.log("Should mirror changes in real total supply"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Set withdrawal fees to 0 so it doesn't interfer in calculations - tested.setFeesRate(0); - - // Cap deposited amount to 100T - depositedAmount = bound(depositedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Ensure the withdrawn amount is never higher than the deposited amount - vm.assume(withdrawnAmount <= depositedAmount); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Assert total supply is currently 0 - assertEq(tested.totalSupply(), 0); - - // Deposit some underlying token (and so mint some L-Tokens) - deal(address(underlyingToken), address(1234), depositedAmount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Assert minted tokens are taken into account in total supply - assertEq(tested.totalSupply(), depositedAmount); - - // Withdraw some underlying token (and so burn some L-Tokens) - tested.instantWithdrawal(withdrawnAmount); - - // Assert burned tokens are taken into account in total supply - assertEq(tested.totalSupply(), depositedAmount - withdrawnAmount); - } + vm.stopPrank(); + } + } + + // Assert that only non-empty requests remain in the queue amount + assertEq( + tested.totalQueued(), + requestAmount * numberOfNonEmptyRequests + ); + + // But that empty requests have been properly created in the queue + assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert that all non-empty requested have been successfully processed + assertEq(tested.totalQueued(), 0); + } + + function testFuzz_processQueuedRequests_5( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint256 requestAmount, + uint160 accountBase, + uint8 randomBlacklistSeed + ) public { + console.log( + "Should silently move request to frozenRequests without processing them if emitter account is blacklisted" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once + requestAmount = bound(requestAmount, 1, type(uint96).max); + + // Cap amount of requests to 30 + numberOfRequests = uint8(bound(numberOfRequests, 1, 30)); + + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Get the interval of blacklisted requests + uint256 blacklistInterval = bound( + randomBlacklistSeed, + 1, + numberOfRequests + ); + + // Create random number of requests, and blacklist some of them + uint256[50] memory blacklistedRequestsIds; + uint256 blacklistedRequestsIdsLength; + for (uint8 id = 0; id < numberOfRequests; id++) { + // Obtain account address + address account = address(accountBase + id); + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, requestAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestAmount); + tested.deposit(requestAmount, ""); + + // Queue request + tested.requestWithdrawal{ value: processingFees }( + requestAmount + ); + vm.stopPrank(); + + // Randomly blacklist account after request creation + if (id % blacklistInterval == 0) { + globalBlacklist.blacklist(account); + blacklistedRequestsIds[blacklistedRequestsIdsLength] = id; + blacklistedRequestsIdsLength++; + } + } + + // Assert that requests have been queued + assertEq(tested.totalQueued(), requestAmount * numberOfRequests); + assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); + + // Assert that underlying balances of blacklisted accounts are 0 + for (uint8 n = 0; n < blacklistedRequestsIdsLength; n++) { + // Retrieve request ID and account + uint256 requestId = blacklistedRequestsIds[n]; + (address account, ) = tested.withdrawalQueue(requestId); + + // Assert that account balance is 0 + assertEq(underlyingToken.balanceOf(account), 0); + } + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert that underlying balances are still 0 + for (uint8 n = 0; n < blacklistedRequestsIds.length; n++) { + // Retrieve request ID and account + uint256 requestId = blacklistedRequestsIds[n]; + (address account, ) = tested.withdrawalQueue(requestId); + + // Assert that account balance is 0 + assertEq(underlyingToken.balanceOf(account), 0); + } + + // Assert that blacklisted addresses' requests are well in the frozen requests + assertGt(tested.public_frozenRequestsLength(), 0); + assertEq( + blacklistedRequestsIdsLength, + tested.public_frozenRequestsLength() + ); + + // Assert that the cumulated frozen amount remains queued + assertEq( + tested.totalQueued(), + blacklistedRequestsIdsLength * requestAmount + ); + } + + function testFuzz_processQueuedRequests_6( + uint8 decimals, + uint16 aprUD7x3, + uint256 totalDeposited + ) public { + console.log( + "Should silently a big request at the end of the queue" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Set retention rate to 10% + tested.tool_setRetentionRate(uint32(10 * 10 ** 3)); + + // Set no fees + tested.setFeesRate(0); + + // Cap totalDeposited to uint96.max which is the maximum amount of underlying tokens that can be requested at once + // totalDeposited = bound(totalDeposited, 1, type(uint96).max - 30); + totalDeposited = 1_000 * 10 ** decimals; + + // Split total deposited in 90%, 8% and 2%, 8% will be used to create a big request, and 2% to create a small requests + uint256 baseTVLAmount = (totalDeposited * 90) / 100; + uint256 bigRequestAmount = (totalDeposited * 9) / 100; + uint256 smallRequestAmount = (totalDeposited * 1) / 100; + + // Create three depositors for each amount + address baseTVLDepositor = address(1234); + address bigRequestDepositor = address(4321); + address smallRequestDepositor = address(1342); + + // Deposit base TVL amount + deal( + address(underlyingToken), + baseTVLDepositor, + baseTVLAmount, + true + ); + vm.startPrank(baseTVLDepositor); + underlyingToken.approve(address(tested), baseTVLAmount); + tested.deposit(baseTVLAmount, ""); + vm.stopPrank(); + + // Deposit big request amount + deal( + address(underlyingToken), + bigRequestDepositor, + bigRequestAmount, + true + ); + vm.startPrank(bigRequestDepositor); + underlyingToken.approve(address(tested), bigRequestAmount); + tested.deposit(bigRequestAmount, ""); + vm.stopPrank(); + + // Deposit small request amount + deal( + address(underlyingToken), + smallRequestDepositor, + smallRequestAmount, + true + ); + vm.startPrank(smallRequestDepositor); + underlyingToken.approve(address(tested), smallRequestAmount); + tested.deposit(smallRequestAmount, ""); + vm.stopPrank(); + + // Assert L-Token supply is equal to total deposited amount + assertEq(tested.totalSupply(), totalDeposited); + + uint256 processingFees = 0.003 ether; + // Request withdrawal of small amount + deal(smallRequestDepositor, processingFees); + vm.prank(smallRequestDepositor); + tested.requestWithdrawal{ value: processingFees }( + smallRequestAmount + ); + + // Request withdrawal of big amount + deal(bigRequestDepositor, processingFees); + vm.prank(bigRequestDepositor); + tested.requestWithdrawal{ value: processingFees }( + bigRequestAmount + ); + + // Store queue and cursor length for later comparison + uint256 oldQueueLength = tested.public_withdrawalQueueLength(); + + // Assert that queue length is equal to 2 + assertEq(tested.public_withdrawalQueueLength(), 2); + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert that queue length have increase by 1, meaning that the big request has been deplaced at the end of the queue + assertEq( + tested.public_withdrawalQueueLength(), + oldQueueLength + 1 + ); + + // Assert that the cursor is equal to length meaning that the non-big requests has been processed + assertEq(tested.withdrawalQueueCursor(), oldQueueLength); + } + + function testFuzz_processQueuedRequests_7( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint256 requestAmount, + uint160 accountBase + ) public { + console.log( + "Shouldn't change any state if doesn't hold enough fund to cover first next request" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap amount of requests to 30 + numberOfRequests = uint8(bound(numberOfRequests, 1, 30)); + + // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once + requestAmount = bound(requestAmount, 1, type(uint96).max); + + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, requestAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestAmount); + tested.deposit(requestAmount, ""); + + // Queue request + tested.requestWithdrawal{ value: processingFees }( + requestAmount + ); + vm.stopPrank(); + } + + // Assert that requests have been queued + assertEq(tested.totalQueued(), requestAmount * numberOfRequests); + assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); + + // Burn all contracts reserves so it won't be able to cover the first next request + uint256 usableUnderlyings = tested.usableUnderlyings(); + vm.prank(address(tested)); + underlyingToken.transfer(address(1234), usableUnderlyings); + tested.tool_rawSetUsableUnderlyings(0); + + // Store old states for later comparison + uint256 oldUnclaimedFees = tested.unclaimedFees(); + uint256 oldTotalQueued = tested.totalQueued(); + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // // Assert that states haven't changed + assertEq(tested.unclaimedFees(), oldUnclaimedFees); + assertEq(tested.totalQueued(), oldTotalQueued); + } + + function testFuzz_processQueuedRequests_8( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint8 numberOfNotCoveredRequests, + uint256 requestAmount, + uint160 accountBase + ) public { + console.log( + "Should silently return if encountered a non-big next request that can not anymore be covered by the contract" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); + + // Cap the number of uncovered requests ito the number of requests + numberOfNotCoveredRequests = uint8( + bound(numberOfNotCoveredRequests, 1, numberOfRequests) + ); + + // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once + requestAmount = bound(requestAmount, 1, type(uint96).max); + + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, requestAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestAmount); + tested.deposit(requestAmount, ""); + + // Queue request + tested.requestWithdrawal{ value: processingFees }( + requestAmount + ); + vm.stopPrank(); + } + + // Assert that requests have been queued + assertEq(tested.totalQueued(), requestAmount * numberOfRequests); + assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); + + // Burn x requestAmount of contract reserves so there is x requests that cannot be covered by the contract + uint256 burnAmount = requestAmount * numberOfNotCoveredRequests; + vm.prank(address(tested)); + underlyingToken.transfer(address(1234), burnAmount); + uint256 newUsableUnderlyings = tested.usableUnderlyings() - + burnAmount; + tested.tool_rawSetUsableUnderlyings(newUsableUnderlyings); + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert that states haven't changed + uint256 expectedStillQueued = numberOfNotCoveredRequests * + requestAmount; + assertEq(tested.totalQueued(), expectedStillQueued); + } + + function testFuzz_processQueuedRequests_9( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint16 feesRateUD7x3, + uint256 amountBase, + uint160 accountBase + ) public { + console.log( + "Should else transfer underlying tokens to emitter account" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); + + // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once + amountBase = bound(amountBase, 1, type(uint96).max - 30); + + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); + + // Obtain deposited amount + uint256 amount = amountBase + i; + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + + // Queue request + tested.requestWithdrawal{ value: processingFees }(amount); + vm.stopPrank(); + } + + // Store accounts underlying token balances for later comparison + uint256[30] memory oldUnderlyingBalances; + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); + + // Store account underlying token balance + oldUnderlyingBalances[i] = underlyingToken.balanceOf(account); + } + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert that accounts underlying token balances have increased by the withdrawn amount + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); + + // Obtain initial deposited amount + uint256 amount = amountBase + i; + + // Obtain withdrawn amount (deposited amount minus fees) + (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees( + account, + amount + ); + + // Obtain account underlying token balance + uint256 newUnderlyingBalance = underlyingToken.balanceOf( + account + ); + + // Assert that account underlying token balance has increased by the withdrawn amount + assertEq( + newUnderlyingBalance, + oldUnderlyingBalances[i] + withdrawnAmount + ); + } + } + + function testFuzz_processQueuedRequests_10( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint16 feesRateUD7x3, + uint256 amountBase, + uint160 accountBase + ) public { + console.log("Should delete processed requests"); - // =============================== - // === recoverERC20() function === - function test_recoverERC20_1( - address account, - address tokenAddress, - uint256 recoveredAmount - ) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.recoverERC20(tokenAddress, recoveredAmount); - } + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); - function test_recoverERC20_2() public { - console.log("Should revert if trying to recover underlying token"); - vm.expectRevert(bytes("L43")); - tested.recoverERC20(address(underlyingToken), 0); - } + // Set first random APR + tested.setAPR(aprUD7x3); - function testFuzz_recoverERC20_3(uint8 decimals, uint16 aprUD7x3, uint256 amount) public { - console.log("Should allow to recover L-Tokens"); + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); - // Set a first APR - tested.setAPR(aprUD7x3); + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - // Cap deposited amount to 100T - amount = bound(amount, 1, 100_000_000_000_000 * 10 ** decimals); + // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once + amountBase = bound(amountBase, 1, type(uint96).max - 30); - // Accidentally send some L-Tokens to L-Token contract itself - deal(address(underlyingToken), address(1234), amount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - tested.transfer(address(tested), amount); - vm.stopPrank(); + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); - // Assert that the contract balance is now equal to the minted amount - assertEq(tested.balanceOf(address(tested)), amount); + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); - // Assert that owner balance is currently 0 - assertEq(tested.balanceOf(address(this)), 0); + // Obtain deposited amount + uint256 amount = amountBase + i; - // Recover L-Tokens - tested.recoverERC20(address(tested), amount); + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); - // Assert that the contract balance is now 0 - assertEq(tested.balanceOf(address(tested)), 0); + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); - // Assert that owner balance is currently equal to the minted amount - assertEq(tested.balanceOf(address(this)), amount); - } + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); - function test_recoverERC20_4() public { - console.log("Shouldn't revert else"); - deal(address(anotherToken), address(tested), 1000); - tested.recoverERC20(address(anotherToken), 500); + // Queue request + tested.requestWithdrawal{ value: processingFees }(amount); + vm.stopPrank(); } - // ==================================== - // === recoverUnderlying() function === - function test_recoverUnderlying_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); + // Store queue and cursor length for later comparison + uint256 oldQueueLength = tested.public_withdrawalQueueLength(); - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.recoverUnderlying(); - } + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); - function test_recoverUnderlying_2() public { - console.log("Should revert if there is nothing to recover"); - vm.expectRevert(bytes("L44")); - tested.recoverUnderlying(); + // Assert that request have been deleted + for (uint8 i = 0; i < numberOfRequests; i++) { + (address account, uint256 amount) = tested.withdrawalQueue(i); + assertEq(account, address(0)); + assertEq(amount, 0); } - function testFuzz_recoverUnderlying_3( - uint8 decimals, - uint16 aprUD7x3, - uint256 fundedAmount, - uint256 depositedAmount - ) public { - console.log( - "Shouldn't allow recovering underlying tokens deposited through deposit() or fund() functions" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 200% so it accepts deposited amount x 2 (as funded amount - // is capped to deposited amount) - tested.tool_setRetentionRate(uint32(200 * 10 ** 3)); - - // Bound deposited amount to [2, 1T] - depositedAmount = uint216(bound(depositedAmount, 2, 100_000_000_000_000 * 10 ** decimals)); - - // Mint some underlying tokens to account and deposit them - deal(address(underlyingToken), address(1234), depositedAmount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Ensure funded amount is lower than deposited amount so repatriate() doesn't revert because of retention rate exceeded - fundedAmount = uint216(bound(fundedAmount, 1, depositedAmount)); - - // Fuel random amount of $LDY to contract - deal(address(underlyingToken), address(fundWallet), fundedAmount, true); - vm.startPrank(address(fundWallet)); - underlyingToken.approve(address(tested), fundedAmount); - tested.repatriate(fundedAmount); - vm.stopPrank(); - - // Expect the function to consider there is nothing to recover - vm.expectRevert(bytes("L44")); - tested.recoverUnderlying(); - } + // // Assert that queue length has not changed (=requests have not been deplaced at the end of the queue) + assertEq(tested.public_withdrawalQueueLength(), oldQueueLength); - function testFuzz_recoverUnderlying_4(uint8 decimals, uint256 recoverableAmount) public { - console.log("Should transfer recoverable tokens to owner else"); + // // Assert that the cursor is equal to length meaning the queue is empty + assertEq(tested.withdrawalQueueCursor(), oldQueueLength); + } + + function testFuzz_processQueuedRequests_11( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint16 feesRateUD7x3, + uint256 amountBase, + uint160 accountBase + ) public { + console.log("Should properly increase unclaimed fees amount"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); - // Ensure recovered and recoverable is greater than 0 - vm.assume(recoverableAmount > 0); + // Set first random APR + tested.setAPR(aprUD7x3); - // Mint a random number of underlying to L-Token contract - deal(address(underlyingToken), address(tested), recoverableAmount, true); + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - // Assert that owner balance is currently 0 - assertEq(underlyingToken.balanceOf(address(this)), 0); + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); - // Recover random amount of tokens - tested.recoverUnderlying(); + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - // Check that recovered amount is now in owner balance - assertEq(underlyingToken.balanceOf(address(this)), recoverableAmount); - } + // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once + amountBase = bound(amountBase, 1, type(uint96).max - 30); - // ===================================== - // === _distributeRewards() function === - function test__distributeRewards_1(uint16 aprUD7x3, address account, uint256 amount) public { - console.log("Should return true meaning it is implemented"); + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); - // Set a first random APR - tested.setAPR(aprUD7x3); + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); - // Ensure account is not the zero address - vm.assume(account != address(0)); + // Obtain deposited amount + uint256 amount = amountBase + i; - assertEq(tested.public_distributeRewards(account, amount), true); - } + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); - function test__distributeRewards_2(uint16 aprUD7x3, uint256 amount) public { - console.log("Should revert if given account is zero address"); + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); - // Set a first random APR - tested.setAPR(aprUD7x3); + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); - // Expect revert - vm.expectRevert(bytes("ERC20: mint to the zero address")); - tested.public_distributeRewards(address(0), amount); + // Queue request + tested.requestWithdrawal{ value: processingFees }(amount); + vm.stopPrank(); } - function test__distributeRewards_3(uint16 aprUD7x3, address account, uint256 amount) public { - console.log("Should mint given amount to given account"); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** underlyingToken.decimals()); - - // Ensure account is not the zero address - vm.assume(account != address(0)); + // Assert that unclaimed fees is currently 0 + assertEq(tested.unclaimedFees(), 0); - // Assert that account balance is currently 0 - assertEq(tested.balanceOf(account), 0); + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); - // Claim rewards of account - tested.public_distributeRewards(account, amount); + // Compute the expected amount of unclaimed fees + uint256 expectedUnclaimedFees; + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); - // Assert that account balance is now equal to the claimed amount - assertEq(tested.balanceOf(account), amount); - } + // Obtain initial deposited amount + uint256 amount = amountBase + i; - // ======================================= - // === _beforeTokenTransfer() function === - function testFuzz_beforeTokenTransfer_1(address from, address to, uint256 amount) public { - console.log("Should prevent transfer when contract is paused"); - globalPause.pause(); - expectRevertPaused(); - tested.public_beforeTokenTransfer(from, to, amount); - } + // Obtain withdrawn amount (deposited amount minus fees) + (, uint256 fees) = tested.getWithdrawnAmountAndFees( + account, + amount + ); - function testFuzz_beforeTokenTransfer_2( - uint16 aprUD7x3, - address from, - address to, - uint256 amount, - bool fromBlacklisted, - bool toBlacklisted - ) public { - console.log("Should prevent transfer when one or both addresses are blacklisted"); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Ensure from and to addresses are different and not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Randomly blacklist from address - if (fromBlacklisted) globalBlacklist.blacklist(from); - - // Randomly blacklist to address - if (toBlacklisted) globalBlacklist.blacklist(to); - - // Expect revert if one or both addresses are blacklisted - if (fromBlacklisted || toBlacklisted) expectRevertRestricted(); - tested.public_beforeTokenTransfer(from, to, amount); + // Accumulate fees + expectedUnclaimedFees += fees; } - function testFuzz__beforeTokenTransfer_3( - uint8 decimals, - uint16 aprUD7x3, - address from, - address to, - uint256 amount, - uint256 duration - ) public { - console.log( - "Should reset from and to accounts investment periods if they are not zero address" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); + // Assert that unclaimed fees has increased by the expected amount + assertEq(tested.unclaimedFees(), expectedUnclaimedFees); + } - // Set a first random APR - tested.setAPR(aprUD7x3); + function testFuzz_processQueuedRequests_12( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint16 feesRateUD7x3, + uint256 amountBase, + uint160 accountBase + ) public { + console.log( + "Should properly decrease usable underlyings tokens amount" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** decimals); + // Set first random APR + tested.setAPR(aprUD7x3); - // Cap duration to 1000 years - duration = bound(duration, 0, 1000 * 365 days); - - // Move forward a random duration - skip(duration); - - // Call before token transfer tokens - tested.public_beforeTokenTransfer(from, to, amount); - - // Ensure that the investment periods timestamp have been updated to now - if (from != address(0)) { - assertEq(tested.public_accountsInfos(from).period.timestamp, block.timestamp); - } - if (to != address(0)) { - assertEq(tested.public_accountsInfos(to).period.timestamp, block.timestamp); - } - } + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - // ====================================== - // === _afterTokenTransfer() function === - function testFuzz_afterTokenTransfer_1( - uint16 aprUD7x3, - address account1, - address account2, - uint256 amount - ) public { - console.log("Should properly call onLTokenTransfer() of all transfers listeners"); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Assert that accounts are different, aren't zero address nor the contract address - vm.assume(account1 != account2); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account1 != address(tested)); - vm.assume(account2 != address(tested)); - - // Listen to transfers from vault1 and vault2 - tested.listenToTransfers(address(vault1)); - tested.listenToTransfers(address(vault2)); - - // Cap amount to [2, 100T] - amount = bound(amount, 2, 100_000_000_000_000 * 10 ** underlyingToken.decimals()); - - // Give some L-Tokens to account1 - deal(address(underlyingToken), account1, amount, true); - vm.startPrank(account1); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - assertEq(tested.balanceOf(account1), amount); - - // Perform 3 transactions - vm.prank(account1); - tested.transfer(account2, amount); - vm.prank(account2); - tested.transfer(account1, 1); - vm.prank(account2); - tested.transfer(account1, amount - 1); - - // Assert that transactions have been successfully recorded in vault 1 - address dataFrom; - address dataTo; - uint256 dataAmount; - (dataFrom, dataTo, dataAmount) = vault1.hookData(0); - assertEq(dataFrom, address(0)); - assertEq(dataTo, account1); - assertEq(dataAmount, amount); - (dataFrom, dataTo, dataAmount) = vault1.hookData(1); - assertEq(dataFrom, account1); - assertEq(dataTo, account2); - assertEq(dataAmount, amount); - (dataFrom, dataTo, dataAmount) = vault1.hookData(2); - assertEq(dataFrom, account2); - assertEq(dataTo, account1); - assertEq(dataAmount, 1); - (dataFrom, dataTo, dataAmount) = vault1.hookData(3); - assertEq(dataFrom, account2); - assertEq(dataTo, account1); - assertEq(dataAmount, amount - 1); - - // Assert that transactions have been successfully recorded in vault 2 - (dataFrom, dataTo, dataAmount) = vault2.hookData(0); - assertEq(dataFrom, address(0)); - assertEq(dataTo, account1); - assertEq(dataAmount, amount); - (dataFrom, dataTo, dataAmount) = vault2.hookData(1); - assertEq(dataFrom, account1); - assertEq(dataTo, account2); - assertEq(dataAmount, amount); - (dataFrom, dataTo, dataAmount) = vault2.hookData(2); - assertEq(dataFrom, account2); - assertEq(dataTo, account1); - assertEq(dataAmount, 1); - (dataFrom, dataTo, dataAmount) = vault2.hookData(3); - assertEq(dataFrom, account2); - assertEq(dataTo, account1); - assertEq(dataAmount, amount - 1); - } + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); - // ====================================== - // === getExpectedRetained() function === - function testFuzz_getExpectedRetained_1( - uint8 decimals, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 totalSupply - ) public { - console.log("Should properly apply retention rate"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 2, 18)); - underlyingToken.setDecimals(decimals); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Ensure the retention rate is >0 and <=10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 10 * 10 ** 3)); - - // Set retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Cap totalSupply to 1000T - // Make it >1 to prevent assertion revert because of precision loss on small numbers - // +10000 is used to prevent assertion revert with small decimals values - totalSupply = bound( - totalSupply, - 1 * 10 ** decimals + 10000, - 100_000_000_000_000 * 10 ** decimals - ); + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - // Apply total supply by depositing same amount of underlying tokens - deal(address(underlyingToken), address(1234), totalSupply, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), totalSupply); - tested.deposit(totalSupply, ""); - vm.stopPrank(); + // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once + amountBase = bound(amountBase, 1, type(uint96).max - 30); - // Ensure that total supply is successfully applied - assertEq(tested.totalSupply(), totalSupply); + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); - // Get expected retained - uint256 expectedRetained = tested.getExpectedRetained(); + // Obtain deposited amount + uint256 amount = amountBase + i; + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); - // Obtain retention rate from total supply and expected retained - uint256 totalSupplySUD = SUD.fromAmount(totalSupply, decimals); - uint256 expectedRetainedSUD = SUD.fromAmount(expectedRetained, decimals); - uint256 retentionRateSUD = (expectedRetainedSUD * SUD.fromInt(100, decimals)) / - totalSupplySUD; - uint256 expectedRetentionRateUD7x3 = SUD.toRate(retentionRateSUD, decimals); + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); - // Compute difference between expected retention rate and actual retention rate - uint256 difference = expectedRetentionRateUD7x3 > retentionRateUD7x3 - ? expectedRetentionRateUD7x3 - retentionRateUD7x3 - : retentionRateUD7x3 - expectedRetentionRateUD7x3; + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); - // Assert that the difference is lower than 0.01% - assertTrue(difference <= 10); + // Queue request + tested.requestWithdrawal{ value: processingFees }(amount); + vm.stopPrank(); } - function testFuzz_getExpectedRetained_2( - uint8 decimals, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 totalSupply - ) public { - console.log("Should properly apply total supply"); + // Store old usableUnderlyings state for later comparison + uint256 oldUsableUnderlyings = tested.usableUnderlyings(); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); - // Set a first random APR - tested.setAPR(aprUD7x3); + // Compute the expected amount decreased from usableUnderlyings + uint256 expectedDecrease; + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); - // Ensure the retention rate is >0 and <=10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 1, 10 * 10 ** 3)); + // Obtain initial deposited amount + uint256 amount = amountBase + i; - // Set retention rate - tested.setRetentionRate(retentionRateUD7x3); + // Obtain withdrawn amount (deposited amount minus fees) + (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees( + account, + amount + ); + + // Accumulate expected decrease + expectedDecrease += withdrawnAmount; + } + + // Assert that usableUnderlyings has decreased by the expected amount + assertEq( + tested.usableUnderlyings(), + oldUsableUnderlyings - expectedDecrease + ); + } + + function testFuzz_processQueuedRequests_13( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint16 feesRateUD7x3, + uint256 amountBase, + uint160 accountBase + ) public { + console.log("Should properly decrease total queued amount"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); - // Cap totalSupply to 100T - // Make it >1 to prevent assertion revert because of precision loss on small numbers - totalSupply = bound(totalSupply, 1 * 10 ** decimals, 100_000_000_000_000 * 10 ** decimals); + // Set first random APR + tested.setAPR(aprUD7x3); - // Apply total supply by depositing same amount of underlying tokens - deal(address(underlyingToken), address(1234), totalSupply, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), totalSupply); - tested.deposit(totalSupply, ""); - vm.stopPrank(); - - // Ensure that total supply is successfully applied - assertEq(tested.totalSupply(), totalSupply); + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - // Get expected retained - uint256 expectedRetained = tested.getExpectedRetained(); + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); - // Obtain expected total supply from retention rate and expected retained - uint256 retentionRateSUD = SUD.fromRate(retentionRateUD7x3, decimals); - uint256 expectedRetainedSUD = SUD.fromAmount(expectedRetained, decimals); - uint256 totalSupplySUD = (expectedRetainedSUD * SUD.fromInt(100, decimals)) / - retentionRateSUD; - uint256 expectedTotalSupply = SUD.toAmount(totalSupplySUD, decimals); + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - // Compute difference between expected retention rate and actual retention rate - uint256 difference = expectedTotalSupply > totalSupply - ? expectedTotalSupply - totalSupply - : totalSupply - expectedTotalSupply; + // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once + amountBase = bound(amountBase, 1, type(uint96).max - 30); - // Assert that the difference is lower than 1 unit - // +100000 is used to prevent assertion revert with small decimals values - assertTrue(difference <= 1 * 10 ** decimals + 100000); - } + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); - // =========================================== - // === _transferExceedingToFund() function === - function testFuzz_transferExceedingToFund_1( - uint8 decimals, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount - ) public { - console.log("Shouldn't transfer anything if there is no exceeding fund"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Ensure the retention rate is >0 and <=10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 1, 10 * 10 ** 3)); - - // Set retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Cap totalSupply to 1000T and make it >1 to prevent assertion revert because of precision loss on small numbers - depositedAmount = bound( - depositedAmount, - 1 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); - // Deposit underlying token amount - deal(address(underlyingToken), address(1234), depositedAmount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); + // Obtain deposited amount + uint256 amount = amountBase + i; + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); - // Store current fund and L-Token contract balances for later comparison - uint256 oldFundBalance = underlyingToken.balanceOf(address(fundWallet)); - uint256 oldLTokenBalance = underlyingToken.balanceOf(address(tested)); + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); - // Call transferExceedingToFund() - tested.public_transferExceedingToFund(); + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); - // Expect L-Token contract and fund wallet balances to don't change as the previous call to deposit() already transfered exceeding underlying tokens to fund wallet - assertEq(underlyingToken.balanceOf(address(fundWallet)), oldFundBalance); - assertEq(underlyingToken.balanceOf(address(tested)), oldLTokenBalance); - } + // Queue request + tested.requestWithdrawal{ value: processingFees }(amount); + vm.stopPrank(); + } - function testFuzz_transferExceedingToFund_2( - uint8 decimals, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount - ) public { - console.log("Should properly transfer the exceeding amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Ensure the retention rate is >0 and <=10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 1, 10 * 10 ** 3)); - - // Set retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Ensure deposited amount is greater than 10k units - // 12k is used instead of 10k to prevent assertion revert because of precision loss on small numbers - depositedAmount = bound( - depositedAmount, - 12_000 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); + // Store old total queued state for later comparison + uint256 oldTotalQueued = tested.totalQueued(); - // Deposit underlying token amount - // This will implicitly call _transferExceedingToFund() - deal(address(underlyingToken), address(1234), depositedAmount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Compute the expected amount decreased from usableUnderlyings + uint256 expectedDecrease; + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain initial deposited amount + uint256 amount = amountBase + i; - // Expect balance of underlying from being equal to expect retained - assertEq(underlyingToken.balanceOf(address(tested)), tested.getExpectedRetained()); + // Accumulate expected decrease + expectedDecrease += amount; } - function testFuzz_transferExceedingToFund_3( - uint8 decimals, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount - ) public { - console.log( - "Should decrease usableUnderlyings state by the amount of transfered exceeding funds" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set a first random APR - tested.setAPR(aprUD7x3); - - // Ensure the retention rate is >0 and <=10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 1, 10 * 10 ** 3)); + // Assert that totalQueued has decreased by the expected amount + assertEq(tested.totalQueued(), oldTotalQueued - expectedDecrease); + } - // Set retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Ensure deposited amount is greater than 10k units - // 12k is used instead of 10k to prevent assertion revert because of precision loss on small numbers - depositedAmount = bound( - depositedAmount, - 12_000 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); - - // Deposit underlying token amount - // This will implicitly call _transferExceedingToFund() - deal(address(underlyingToken), address(1234), depositedAmount, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Expect balance of underlying from being equal to expect retained - assertEq(tested.usableUnderlyings(), tested.getExpectedRetained()); - } - - // ============================= - // === withdrawTo() function === - function testFuzz_withdrawTo_1(address account, uint256 amount) public { - console.log("Should inconditionally revert"); - vm.expectRevert(bytes("L45")); - tested.withdrawTo(account, amount); - } - - // ============================= - // === depositFor() function === - function testFuzz_depositFor_1(address account, uint256 amount) public { - console.log("Should inconditionally revert"); - vm.expectRevert(bytes("L46")); - tested.depositFor(account, amount); - } - - // ========================== - // === deposit() function === - function testFuzz_deposit_1(address account, uint256 amount) public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(account); - tested.deposit(amount, ""); - } - - function testFuzz_deposit_2(address account, uint256 amount) public { - console.log("Should revert if account is blacklisted"); - // Ensure account is not the zero address - vm.assume(account != address(0)); - - // Blacklist account - globalBlacklist.blacklist(account); - - // Expect revert - expectRevertRestricted(); - vm.prank(account); - tested.deposit(amount, ""); - } - - function testFuzz_deposit_3( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 accountBalance, - uint256 depositedAmount - ) public { - console.log("Should revert if account hasn't enough underlying tokens"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 2, 100_000_000_000_000 * 10 ** decimals); - - // Ensure account balance is lower than deposited amount - accountBalance = bound(accountBalance, 1, depositedAmount - 1); - - // Mint underlying tokens to account - deal(address(underlyingToken), account, accountBalance, true); - vm.startPrank(account); - - // Expect revert when trying to deposit more than account balance - underlyingToken.approve(address(tested), depositedAmount); - vm.expectRevert(bytes("L47")); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - } - - function testFuzz_deposit_4( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 depositedAmount - ) public { - console.log( - "Should decrease caller underlying balance and increase contract one by the amount of deposited underlying tokens" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Mint underlying tokens to account - deal(address(underlyingToken), account, depositedAmount, true); - - // Store old underlying token balances for later comparison - uint256 oldAccountBalance = underlyingToken.balanceOf(account); - uint256 oldContractBalance = underlyingToken.balanceOf(address(tested)); - - // Deposit underlying tokens - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Assert that the account balance has decreased by the deposited amount - assertEq(underlyingToken.balanceOf(account), oldAccountBalance - depositedAmount); - - // Assert that the contract balance has increased by the deposited amount - assertEq(underlyingToken.balanceOf(address(tested)), oldContractBalance + depositedAmount); - } - - function testFuzz_deposit_5( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 depositedAmount - ) public { - console.log("Should mint new L-Tokens to the caller in a 1:1 ratio"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Mint underlying tokens to account - deal(address(underlyingToken), account, depositedAmount, true); - - // Store old account L-Token balance for later comparison - uint256 oldAccountBalance = tested.balanceOf(account); - - // Deposit underlying tokens - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Assert that the account balance has increased by the deposited amount - assertEq(tested.balanceOf(account), oldAccountBalance + depositedAmount); - } - - function testFuzz_deposit_6( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 depositedAmount - ) public { - console.log( - "Should increase usableUnderlying state by the amount of deposited underlying tokens" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Mint underlying tokens to account - deal(address(underlyingToken), account, depositedAmount, true); - - // Store old usableUnderlying state for later comparison - uint256 oldUsableUnderlying = tested.usableUnderlyings(); - - // Deposit underlying tokens - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Assert that the usableUnderlying state has increased by the deposited amount - assertEq(tested.usableUnderlyings(), oldUsableUnderlying + depositedAmount); - } - - function testFuzz_deposit_7( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 depositedAmount, - uint32 retentionRateUD7x3 - ) public { - console.log("Should transfer exceeding to fund"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Bound retention rate to [0, 10%] - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 10 * 10 ** 3)); - - // Set random retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Ensure deposited amount is greater than 10k units - // 12k is used instead of 10k to prevent assertion revert because of precision loss on small numbers - depositedAmount = bound( - depositedAmount, - 12_000 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); - - // Deposit underlying tokens - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Assert that no matter the deposited amount, the usable underlyings are always lower or equal than expected retained - assertTrue(tested.usableUnderlyings() <= tested.getExpectedRetained()); - } - - // ============================================ - // === getWithdrawnAmountAndFees() function === - function testFuzz_getWithdrawnAmountAndFees_1( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 amount, - uint32 feesRateUD7x3, - uint216 tier2Amount - ) public { - console.log( - "Should always return [inputAmount, 0] if account is elligble to staking tier 2" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address nor the the underlying token contract - vm.assume(account != address(0)); - vm.assume(account != address(underlyingToken)); - vm.assume(account != address(ldyToken)); - - // Set first random APR on L-Token contract - tested.setAPR(aprUD7x3); - - // Set first random APR on LDYStaking contract - // ldyStaking.setAPR(aprUD7x3); - - // Cap fees rate to 100% - feesRateUD7x3 = uint32(bound(feesRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap tier2Amount to 100T - tier2Amount = uint216( - bound(tier2Amount, 1000, 100_000_000_000_000 * 10 ** ldyToken.decimals()) - ); - - // Set random tier 2 amount - // ldyStaking.setTier(2, tier2Amount); - - // Deposit enough $LDY tokens to be eligible to tier 2 - deal(address(ldyToken), account, tier2Amount, true); - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), tier2Amount); - ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration - vm.stopPrank(); - - // Get withdraw amount and fees - (uint256 withdrawnAmount, uint256 fees) = tested.getWithdrawnAmountAndFees(account, amount); - - // Expect withdrawn amount to be equal to input amount - assertEq(withdrawnAmount, amount); - - // Expect fees to be 0 - assertEq(fees, 0); - } - - function testFuzz_getWithdrawnAmountAndFees_2( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 amount, - uint32 feesRateUD7x3 - ) public { - console.log("Should else return [inputAmount - fees, fees]"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address nor the the underlying token contract - vm.assume(account != address(0)); - vm.assume(account != address(underlyingToken)); - - // Set first random APR on L-Token contract - tested.setAPR(aprUD7x3); - - // Cap fees rate to 100% - feesRateUD7x3 = uint32(bound(feesRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount to 100T - amount = bound(amount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Get withdraw amount and fees - (uint256 withdrawnAmount, uint256 fees) = tested.getWithdrawnAmountAndFees(account, amount); - - // Assert that the withdrawn amount is equal to the input amount minus the fees - assertEq(withdrawnAmount, amount - fees); - } - - function testFuzz_getWithdrawnAmountAndFees_3( - uint8 decimals, - uint16 aprUD7x3, - address account, - uint256 amount, - uint32 feesRateUD7x3 - ) public { - console.log("Should properly apply feesRateUD7x3"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address nor the the underlying token contract - vm.assume(account != address(0)); - vm.assume(account != address(underlyingToken)); - - // Set first random APR on L-Token contract - tested.setAPR(aprUD7x3); - - // Cap fees rate to 100% and to a minimum of 0.1% to prevent below assertion revert because of precision loss - feesRateUD7x3 = uint32(bound(feesRateUD7x3, 100, 100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount to 100T and to a minimum of one unit to prevent below assertion revert because of precision loss - // +10000 is used to prevent assertion revert with small decimals values - amount = bound(amount, 1 * 10 ** decimals + 10000, 100_000_000_000_000 * 10 ** decimals); - - // Get withdraw amount and fees - (, uint256 fees) = tested.getWithdrawnAmountAndFees(account, amount); - - // Obtain applied feesRateUD7x3 from input amount and fees amount - uint256 feesRateSUD = (SUD.fromAmount(fees, decimals) * SUD.fromInt(100, decimals)) / - SUD.fromAmount(amount, decimals); - uint256 appliedFeesRateUD7x3 = SUD.toRate(feesRateSUD, decimals); - - // Compute difference between applied fees rate and expected fees rate - uint256 difference = appliedFeesRateUD7x3 > feesRateUD7x3 - ? appliedFeesRateUD7x3 - feesRateUD7x3 - : feesRateUD7x3 - appliedFeesRateUD7x3; - - // Assert that the difference is < 0.01% - assertTrue(difference <= 10); - } - - // ================================== - // === instantWithdrawal() function === - function testFuzz_instantWithdrawal_1(address account, uint256 amount) public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(account); - tested.instantWithdrawal(amount); - } - - function testFuzz_instantWithdrawal_2(address account, uint256 amount) public { - console.log("Should revert if account is blacklisted"); - // Ensure account is not the zero address - vm.assume(account != address(0)); - - // Blacklist account - globalBlacklist.blacklist(account); - - // Expect revert - expectRevertRestricted(); - vm.prank(account); - tested.instantWithdrawal(amount); - } - - function testFuzz_instantWithdrawal_3( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount, - uint256 depositedAmount - ) public { - console.log("Should revert if account hasn't enough underlying tokens to withdraw"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requestedAmount to 100T - requestedAmount = bound(requestedAmount, 2, 100_000_000_000_000 * 10 ** decimals); - - // Ensure depositedAmounte is lower than requestedAmount - depositedAmount = bound(depositedAmount, 1, requestedAmount - 1); - - // Deposit underlying token amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Expect revert when trying to withdraw more than deposited amount - vm.expectRevert(bytes("L48")); - tested.instantWithdrawal(requestedAmount); - vm.stopPrank(); - } - - function testFuzz_instantWithdrawal_4( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount, - uint256 queuedAmount - ) public { - console.log( - "Should revert if account is not elligible to staking tier 2 and contract doesn't hold enough underlying tokens to cover the withdrawal + all already queued withdrawals" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Ensure total queued is greater than 0 and capped to 100T - queuedAmount = bound(queuedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Force set total queued amount - tested.tool_rawSetTotalQueued(queuedAmount); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Deposit underlying token amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Expect revert when because of insufficient funds available - vm.expectRevert(bytes("L49")); - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - } - - function testFuzz_instantWithdrawal_5( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 queuedAmount, - uint216 tier2Amount - ) public { - console.log( - "Should revert if account is to staking tier 2 and contract doesn't hold enough underlying tokens to cover the current withdrawal" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Set first random APR on LDYStaking contract - // ldyStaking.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Ensure total queued is greater than 0 and capped to 100T - queuedAmount = bound(queuedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Force set total queued amount - tested.tool_rawSetTotalQueued(queuedAmount); - - // Cap tier2Amount to 100T - tier2Amount = uint216( - bound(tier2Amount, 1000, 100_000_000_000_000 * 10 ** ldyToken.decimals()) - ); - - // // Set random tier 2 amount - // ldyStaking.setTier(2, tier2Amount); - - // Deposit enough $LDY tokens to be eligible to tier 2 - deal(address(ldyToken), account, tier2Amount, true); - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), tier2Amount); - ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration - vm.stopPrank(); - - // Assert account is eligible to tier 2 - assertGe(ldyStaking.tierOf(account), 2); - - // Deposit underlying token amount - deal(address(underlyingToken), account, tier2Amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), tier2Amount); - tested.deposit(tier2Amount, ""); - vm.stopPrank(); - - // Burn some contract reserves so it will not be able to cover the withdrawal - vm.prank(address(tested)); - underlyingToken.transfer(address(1234), 1); - tested.tool_rawSetUsableUnderlyings(tested.usableUnderlyings() - 1); - - // Expect revert when because of insufficient funds available - vm.expectRevert(bytes("L49")); - vm.prank(account); - tested.instantWithdrawal(tier2Amount); - } - - function testFuzz_instantWithdrawal_6( - uint8 decimals, - address account1, - address account2, - uint16 aprUD7x3, - uint256 depositedAmount, - uint256 queuedAmount - ) public { - console.log( - "Should process to withdrawal if account is not elligible to staking tier 2 but contract holds enough underlying tokens to cover the withdrawal + all already queued withdrawals" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account1 != address(0)); - vm.assume(account1 != address(tested)); - vm.assume(account2 != address(0)); - vm.assume(account2 != address(tested)); - vm.assume(account1 != account2); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Ensure total queued is ceiled to uint96 max (the max amount that can be requested at once) - queuedAmount = bound(queuedAmount, 1, type(uint96).max); - - // Deposit queued amount and queue it - deal(address(underlyingToken), account1, queuedAmount, true); - uint256 processingFees = 0.003 ether; - deal(account1, processingFees); - vm.startPrank(account1); - underlyingToken.approve(address(tested), queuedAmount); - tested.deposit(queuedAmount, ""); - tested.requestWithdrawal{value: processingFees}(queuedAmount); - vm.stopPrank(); - - // Assert that total queued is equal to queud amount - assertEq(tested.totalQueued(), queuedAmount); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account2, depositedAmount, true); - vm.startPrank(account2); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Assert that account2 L-Token balance is equal to deposited amount - assertEq(tested.balanceOf(account2), depositedAmount); - - // Assert that account2 underlying token balance is equal to 0 - assertEq(underlyingToken.balanceOf(account2), 0); - - // Proceed to instant withdraw - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assert that account2 L-Token balance is equal to 0 - assertEq(tested.balanceOf(account2), 0); - - // Assert that account2 underlying token balance is equal to deposited amount minus fees - (, uint256 fees) = tested.getWithdrawnAmountAndFees(account2, depositedAmount); - assertEq(underlyingToken.balanceOf(account2), depositedAmount - fees); - } - - function testFuzz_instantWithdrawal_7( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 queuedAmount, - uint216 tier2Amount - ) public { - console.log( - "Should process to withdraw if account is to staking tier 2 and contract holds enough underlying tokens to cover the current withdrawal" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Set first random APR on LDYStaking contract - // ldyStaking.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Ensure total queued is greater than 0 and capped to 100T - queuedAmount = bound(queuedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Force set total queued amount - tested.tool_rawSetTotalQueued(queuedAmount); - - // Cap tier2Amount to 100T - tier2Amount = uint216(bound(tier2Amount, 1000, 100_000_000_000_000 * 10 ** decimals)); - - // // Set random tier 2 amount - // ldyStaking.setTier(2, tier2Amount); - - // Deposit enough $LDY tokens to be eligible to tier 2 - deal(address(ldyToken), account, tier2Amount, true); - vm.startPrank(account); - ldyToken.approve(address(ldyStaking), tier2Amount); - ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration - vm.stopPrank(); - - // Assert account is eligible to tier 2 - assertGe(ldyStaking.tierOf(account), 2); - - // Deposit underlying token amount - deal(address(underlyingToken), account, tier2Amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), tier2Amount); - tested.deposit(tier2Amount, ""); - - // Assert that account2 L-Token balance is equal to deposited amount - assertEq(tested.balanceOf(account), tier2Amount); - - // Assert that account2 underlying token balance is equal to 0 - assertEq(underlyingToken.balanceOf(account), 0); - - // Withdraw underlying tokens - tested.instantWithdrawal(tier2Amount); - vm.stopPrank(); - - // Assert that account2 underlying token balance is equal to deposited - assertEq(underlyingToken.balanceOf(account), tier2Amount); - } - - function testFuzz_instantWithdrawal_8( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log("Should properly apply feesRateUD7x3"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Proceed to instant withdraw - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assert the account underlying balance is equal to deposited amount minus fees - (, uint256 fees) = tested.getWithdrawnAmountAndFees(account, depositedAmount); - assertEq(underlyingToken.balanceOf(account), depositedAmount - fees); - } - - function testFuzz_instantWithdrawal_9( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log("Should decrease usableUnderlying by withdrawn amount (and not input amount)"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Store old usableUnderlying state for later comparison - uint256 oldUsableUnderlying = tested.usableUnderlyings(); - - // Proceed to instant withdraw - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assert that the usableUnderlying state has decreased by the withdrawn amount - (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees(account, depositedAmount); - assertEq(tested.usableUnderlyings(), oldUsableUnderlying - withdrawnAmount); - } - - function testFuzz_instantWithdrawal_10( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log("Should also burn fees and so realTotalSupply should decrease by input amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so it doesn't interfer in calculations - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap depositedAmount to 100T - depositedAmount = bound(depositedAmount, 1, 100_000_000_000_000 * 10 ** decimals); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - - // Store old realTotalSupply state for later comparison - uint256 oldRealTotalSupply = tested.realTotalSupply(); - - // Proceed to instant withdraw - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assert that the realTotalSupply state has decreased by the input amount - assertEq(tested.realTotalSupply(), oldRealTotalSupply - depositedAmount); - } - - // ====================================== - // === processQueuedRequests() function === - function testFuzz_processQueuedRequests_1(address account) public { - console.log("Should revert if not called by withdrawer wallet"); - - // Ensure the random account is not the withdrawer wallet - vm.assume(account != withdrawerWallet); - - // Expect revert - vm.expectRevert(bytes("L39")); - vm.prank(account); - tested.processQueuedRequests(); - } - - function test_processQueuedRequests_2() public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - } - - function testFuzz_processQueuedRequests_3() public { - console.log("Should not change any state if queue is empty"); - - // Store old states for later comparison - uint256 oldUsableUnderlying = tested.usableUnderlyings(); - uint256 oldUnclaimedFees = tested.unclaimedFees(); - uint256 oldTotalQueued = tested.totalQueued(); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that states haven't changed - assertEq(tested.usableUnderlyings(), oldUsableUnderlying); - assertEq(tested.unclaimedFees(), oldUnclaimedFees); - assertEq(tested.totalQueued(), oldTotalQueued); - } - - function testFuzz_processQueuedRequests_4( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint256 requestAmount, - uint160 accountBase, - uint8 randomEmptySeed - ) public { - console.log("Should silently skip empty requests (processed big requests)"); - // Set random underlying token decimals in [0, 18] - - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once - requestAmount = bound(requestAmount, 1, type(uint96).max); - - // Cap amount of requests to 30 - numberOfRequests = uint8(bound(numberOfRequests, 5, 30)); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Get the interval of empty requests - uint256 emptyInterval = bound(randomEmptySeed, 1, 5); - - // Create random number of requests, and blacklist some of them - uint256 numberOfNonEmptyRequests; - for (uint8 id = 0; id < numberOfRequests; id++) { - // Obtain account address - address account = address(accountBase + id); - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Randomly create an empty request - if (id % emptyInterval == 0) { - // Simulate processed big request in queue - tested.tool_simulateProcessedBigRequestInQueue(); - - // Assert that the request index indeed holds an empty request now - (address _requestAccount, uint256 _requestAmount) = tested.withdrawalQueue(id); - assertEq(_requestAccount, address(0)); - assertEq(_requestAmount, 0); - } - // Else create a normal request - else { - // Increment non-empty requests counts - numberOfNonEmptyRequests++; - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, requestAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestAmount); - tested.deposit(requestAmount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(requestAmount); - vm.stopPrank(); - } - } - - // Assert that only non-empty requests remain in the queue amount - assertEq(tested.totalQueued(), requestAmount * numberOfNonEmptyRequests); - - // But that empty requests have been properly created in the queue - assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that all non-empty requested have been successfully processed - assertEq(tested.totalQueued(), 0); - } - - function testFuzz_processQueuedRequests_5( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint256 requestAmount, - uint160 accountBase, - uint8 randomBlacklistSeed - ) public { - console.log( - "Should silently move request to frozenRequests without processing them if emitter account is blacklisted" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once - requestAmount = bound(requestAmount, 1, type(uint96).max); - - // Cap amount of requests to 30 - numberOfRequests = uint8(bound(numberOfRequests, 1, 30)); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Get the interval of blacklisted requests - uint256 blacklistInterval = bound(randomBlacklistSeed, 1, numberOfRequests); - - // Create random number of requests, and blacklist some of them - uint256[50] memory blacklistedRequestsIds; - uint256 blacklistedRequestsIdsLength; - for (uint8 id = 0; id < numberOfRequests; id++) { - // Obtain account address - address account = address(accountBase + id); - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, requestAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestAmount); - tested.deposit(requestAmount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(requestAmount); - vm.stopPrank(); - - // Randomly blacklist account after request creation - if (id % blacklistInterval == 0) { - globalBlacklist.blacklist(account); - blacklistedRequestsIds[blacklistedRequestsIdsLength] = id; - blacklistedRequestsIdsLength++; - } - } - - // Assert that requests have been queued - assertEq(tested.totalQueued(), requestAmount * numberOfRequests); - assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); - - // Assert that underlying balances of blacklisted accounts are 0 - for (uint8 n = 0; n < blacklistedRequestsIdsLength; n++) { - // Retrieve request ID and account - uint256 requestId = blacklistedRequestsIds[n]; - (address account, ) = tested.withdrawalQueue(requestId); - - // Assert that account balance is 0 - assertEq(underlyingToken.balanceOf(account), 0); - } - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that underlying balances are still 0 - for (uint8 n = 0; n < blacklistedRequestsIds.length; n++) { - // Retrieve request ID and account - uint256 requestId = blacklistedRequestsIds[n]; - (address account, ) = tested.withdrawalQueue(requestId); - - // Assert that account balance is 0 - assertEq(underlyingToken.balanceOf(account), 0); - } - - // Assert that blacklisted addresses' requests are well in the frozen requests - assertGt(tested.public_frozenRequestsLength(), 0); - assertEq(blacklistedRequestsIdsLength, tested.public_frozenRequestsLength()); - - // Assert that the cumulated frozen amount remains queued - assertEq(tested.totalQueued(), blacklistedRequestsIdsLength * requestAmount); - } - - function testFuzz_processQueuedRequests_6( - uint8 decimals, - uint16 aprUD7x3, - uint256 totalDeposited - ) public { - console.log("Should silently a big request at the end of the queue"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Set retention rate to 10% - tested.tool_setRetentionRate(uint32(10 * 10 ** 3)); - - // Set no fees - tested.setFeesRate(0); - - // Cap totalDeposited to uint96.max which is the maximum amount of underlying tokens that can be requested at once - // totalDeposited = bound(totalDeposited, 1, type(uint96).max - 30); - totalDeposited = 1_000 * 10 ** decimals; - - // Split total deposited in 90%, 8% and 2%, 8% will be used to create a big request, and 2% to create a small requests - uint256 baseTVLAmount = (totalDeposited * 90) / 100; - uint256 bigRequestAmount = (totalDeposited * 9) / 100; - uint256 smallRequestAmount = (totalDeposited * 1) / 100; - - // Create three depositors for each amount - address baseTVLDepositor = address(1234); - address bigRequestDepositor = address(4321); - address smallRequestDepositor = address(1342); - - // Deposit base TVL amount - deal(address(underlyingToken), baseTVLDepositor, baseTVLAmount, true); - vm.startPrank(baseTVLDepositor); - underlyingToken.approve(address(tested), baseTVLAmount); - tested.deposit(baseTVLAmount, ""); - vm.stopPrank(); - - // Deposit big request amount - deal(address(underlyingToken), bigRequestDepositor, bigRequestAmount, true); - vm.startPrank(bigRequestDepositor); - underlyingToken.approve(address(tested), bigRequestAmount); - tested.deposit(bigRequestAmount, ""); - vm.stopPrank(); - - // Deposit small request amount - deal(address(underlyingToken), smallRequestDepositor, smallRequestAmount, true); - vm.startPrank(smallRequestDepositor); - underlyingToken.approve(address(tested), smallRequestAmount); - tested.deposit(smallRequestAmount, ""); - vm.stopPrank(); - - // Assert L-Token supply is equal to total deposited amount - assertEq(tested.totalSupply(), totalDeposited); - - uint256 processingFees = 0.003 ether; - // Request withdrawal of small amount - deal(smallRequestDepositor, processingFees); - vm.prank(smallRequestDepositor); - tested.requestWithdrawal{value: processingFees}(smallRequestAmount); - - // Request withdrawal of big amount - deal(bigRequestDepositor, processingFees); - vm.prank(bigRequestDepositor); - tested.requestWithdrawal{value: processingFees}(bigRequestAmount); - - // Store queue and cursor length for later comparison - uint256 oldQueueLength = tested.public_withdrawalQueueLength(); - - // Assert that queue length is equal to 2 - assertEq(tested.public_withdrawalQueueLength(), 2); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that queue length have increase by 1, meaning that the big request has been deplaced at the end of the queue - assertEq(tested.public_withdrawalQueueLength(), oldQueueLength + 1); - - // Assert that the cursor is equal to length meaning that the non-big requests has been processed - assertEq(tested.withdrawalQueueCursor(), oldQueueLength); - } - - function testFuzz_processQueuedRequests_7( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint256 requestAmount, - uint160 accountBase - ) public { - console.log( - "Shouldn't change any state if doesn't hold enough fund to cover first next request" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap amount of requests to 30 - numberOfRequests = uint8(bound(numberOfRequests, 1, 30)); - - // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once - requestAmount = bound(requestAmount, 1, type(uint96).max); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, requestAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestAmount); - tested.deposit(requestAmount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(requestAmount); - vm.stopPrank(); - } - - // Assert that requests have been queued - assertEq(tested.totalQueued(), requestAmount * numberOfRequests); - assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); - - // Burn all contracts reserves so it won't be able to cover the first next request - uint256 usableUnderlyings = tested.usableUnderlyings(); - vm.prank(address(tested)); - underlyingToken.transfer(address(1234), usableUnderlyings); - tested.tool_rawSetUsableUnderlyings(0); - - // Store old states for later comparison - uint256 oldUnclaimedFees = tested.unclaimedFees(); - uint256 oldTotalQueued = tested.totalQueued(); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // // Assert that states haven't changed - assertEq(tested.unclaimedFees(), oldUnclaimedFees); - assertEq(tested.totalQueued(), oldTotalQueued); - } - - function testFuzz_processQueuedRequests_8( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint8 numberOfNotCoveredRequests, - uint256 requestAmount, - uint160 accountBase - ) public { - console.log( - "Should silently return if encountered a non-big next request that can not anymore be covered by the contract" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap the number of uncovered requests ito the number of requests - numberOfNotCoveredRequests = uint8(bound(numberOfNotCoveredRequests, 1, numberOfRequests)); - - // Cap requestAmount to uint96.max which is the maximum amount of underlying tokens that can be requested at once - requestAmount = bound(requestAmount, 1, type(uint96).max); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, requestAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestAmount); - tested.deposit(requestAmount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(requestAmount); - vm.stopPrank(); - } - - // Assert that requests have been queued - assertEq(tested.totalQueued(), requestAmount * numberOfRequests); - assertEq(tested.public_withdrawalQueueLength(), numberOfRequests); - - // Burn x requestAmount of contract reserves so there is x requests that cannot be covered by the contract - uint256 burnAmount = requestAmount * numberOfNotCoveredRequests; - vm.prank(address(tested)); - underlyingToken.transfer(address(1234), burnAmount); - uint256 newUsableUnderlyings = tested.usableUnderlyings() - burnAmount; - tested.tool_rawSetUsableUnderlyings(newUsableUnderlyings); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that states haven't changed - uint256 expectedStillQueued = numberOfNotCoveredRequests * requestAmount; - assertEq(tested.totalQueued(), expectedStillQueued); - } - - function testFuzz_processQueuedRequests_9( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint16 feesRateUD7x3, - uint256 amountBase, - uint160 accountBase - ) public { - console.log("Should else transfer underlying tokens to emitter account"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once - amountBase = bound(amountBase, 1, type(uint96).max - 30); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain deposited amount - uint256 amount = amountBase + i; - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(amount); - vm.stopPrank(); - } - - // Store accounts underlying token balances for later comparison - uint256[30] memory oldUnderlyingBalances; - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Store account underlying token balance - oldUnderlyingBalances[i] = underlyingToken.balanceOf(account); - } - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that accounts underlying token balances have increased by the withdrawn amount - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain initial deposited amount - uint256 amount = amountBase + i; - - // Obtain withdrawn amount (deposited amount minus fees) - (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees(account, amount); - - // Obtain account underlying token balance - uint256 newUnderlyingBalance = underlyingToken.balanceOf(account); - - // Assert that account underlying token balance has increased by the withdrawn amount - assertEq(newUnderlyingBalance, oldUnderlyingBalances[i] + withdrawnAmount); - } - } - - function testFuzz_processQueuedRequests_10( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint16 feesRateUD7x3, - uint256 amountBase, - uint160 accountBase - ) public { - console.log("Should delete processed requests"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once - amountBase = bound(amountBase, 1, type(uint96).max - 30); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain deposited amount - uint256 amount = amountBase + i; - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(amount); - vm.stopPrank(); - } - - // Store queue and cursor length for later comparison - uint256 oldQueueLength = tested.public_withdrawalQueueLength(); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert that request have been deleted - for (uint8 i = 0; i < numberOfRequests; i++) { - (address account, uint256 amount) = tested.withdrawalQueue(i); - assertEq(account, address(0)); - assertEq(amount, 0); - } - - // // Assert that queue length has not changed (=requests have not been deplaced at the end of the queue) - assertEq(tested.public_withdrawalQueueLength(), oldQueueLength); - - // // Assert that the cursor is equal to length meaning the queue is empty - assertEq(tested.withdrawalQueueCursor(), oldQueueLength); - } - - function testFuzz_processQueuedRequests_11( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint16 feesRateUD7x3, - uint256 amountBase, - uint160 accountBase - ) public { - console.log("Should properly increase unclaimed fees amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once - amountBase = bound(amountBase, 1, type(uint96).max - 30); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain deposited amount - uint256 amount = amountBase + i; - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(amount); - vm.stopPrank(); - } - - // Assert that unclaimed fees is currently 0 - assertEq(tested.unclaimedFees(), 0); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Compute the expected amount of unclaimed fees - uint256 expectedUnclaimedFees; - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain initial deposited amount - uint256 amount = amountBase + i; - - // Obtain withdrawn amount (deposited amount minus fees) - (, uint256 fees) = tested.getWithdrawnAmountAndFees(account, amount); - - // Accumulate fees - expectedUnclaimedFees += fees; - } - - // Assert that unclaimed fees has increased by the expected amount - assertEq(tested.unclaimedFees(), expectedUnclaimedFees); - } - - function testFuzz_processQueuedRequests_12( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint16 feesRateUD7x3, - uint256 amountBase, - uint160 accountBase - ) public { - console.log("Should properly decrease usable underlyings tokens amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once - amountBase = bound(amountBase, 1, type(uint96).max - 30); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain deposited amount - uint256 amount = amountBase + i; - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(amount); - vm.stopPrank(); - } - - // Store old usableUnderlyings state for later comparison - uint256 oldUsableUnderlyings = tested.usableUnderlyings(); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Compute the expected amount decreased from usableUnderlyings - uint256 expectedDecrease; - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain initial deposited amount - uint256 amount = amountBase + i; - - // Obtain withdrawn amount (deposited amount minus fees) - (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees(account, amount); - - // Accumulate expected decrease - expectedDecrease += withdrawnAmount; - } - - // Assert that usableUnderlyings has decreased by the expected amount - assertEq(tested.usableUnderlyings(), oldUsableUnderlyings - expectedDecrease); - } - - function testFuzz_processQueuedRequests_13( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint16 feesRateUD7x3, - uint256 amountBase, - uint160 accountBase - ) public { - console.log("Should properly decrease total queued amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once - amountBase = bound(amountBase, 1, type(uint96).max - 30); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain deposited amount - uint256 amount = amountBase + i; - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(amount); - vm.stopPrank(); - } - - // Store old total queued state for later comparison - uint256 oldTotalQueued = tested.totalQueued(); - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Compute the expected amount decreased from usableUnderlyings - uint256 expectedDecrease; - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain initial deposited amount - uint256 amount = amountBase + i; - - // Accumulate expected decrease - expectedDecrease += amount; - } - - // Assert that totalQueued has decreased by the expected amount - assertEq(tested.totalQueued(), oldTotalQueued - expectedDecrease); - } - - function testFuzz_processQueuedRequests_14( - uint8 decimals, - uint16 aprUD7x3, - uint8 numberOfRequests, - uint16 feesRateUD7x3, - uint256 amountBase, - uint160 accountBase - ) public { - console.log( - "Should properly increase withdrawal cursor to the next request to be processed" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount of requests to 30 - // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) - numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); - - // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once - amountBase = bound(amountBase, 1, type(uint96).max - 30); - - // Prevent account base from overflowing - accountBase = uint160(bound(accountBase, 1, type(uint160).max - numberOfRequests)); - - // Create random number of requests - for (uint8 i = 0; i < numberOfRequests; i++) { - // Obtain account address - address account = address(accountBase + i); - - // Obtain deposited amount - uint256 amount = amountBase + i; - - // Ensure account is not the L-Token contract - vm.assume(account != address(tested)); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Deposit underlying token amount with another account - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - - // Queue request - tested.requestWithdrawal{value: processingFees}(amount); - vm.stopPrank(); - } - - // Proceed to batch queued withdraw - vm.prank(withdrawerWallet); - tested.processQueuedRequests(); - - // Assert withdrawal cursor is set to next request to be processed (= queue length) - assertEq(tested.withdrawalQueueCursor(), tested.public_withdrawalQueueLength()); - } - - function test_processQueuedRequests_15() public { - console.log("Should never revert from out of gas and properly end instead"); - - // Set decimals to 18 - underlyingToken.setDecimals(18); - - // Set APR to 7% - tested.setAPR(7000); - - // Set retention rate to 100% so it doesn't interfer - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Set fees rate to 0.3% - tested.setFeesRate(300); - - // - uint256 requestsNumber = 5000; - - // Mint enough processing fees to account - uint256 processingFees = 0.003 ether; - deal(address(1234), processingFees * requestsNumber); - - // Give 2000 tokens to test account and deposit those - deal(address(underlyingToken), address(1234), requestsNumber, true); - vm.startPrank(address(1234)); - underlyingToken.approve(address(tested), requestsNumber); - tested.deposit(requestsNumber, ""); - - // Now send 2000 requests of 1 L-token - for (uint256 i = 0; i < requestsNumber; i++) { - // Queue request - tested.requestWithdrawal{value: processingFees}(1); - } - vm.stopPrank(); - - // Process requests queued withdraw with a limit of 5M - // It should revert from OOG if not prevent by the function - vm.prank(withdrawerWallet); - tested.processQueuedRequests{gas: 5000000}(); - - // Assert not all request have been processed - // And so should have reverted from OOG if it didn't properly ended - assertLe(tested.public_withdrawalQueueCursor(), requestsNumber); - assertGt(tested.public_withdrawalQueueLength(), tested.public_withdrawalQueueCursor()); - } - - // ==================================== - // === processBigQueuedRequest() function === - function testFuzz_processBigQueuedRequest_1(address account, uint256 requestId) public { - console.log("Should revert if not called by fund wallet"); - - // Ensure the random account is not the fund wallet - vm.assume(account != fundWallet); - - // Expect revert - vm.expectRevert(bytes("L40")); - vm.prank(account); - tested.processBigQueuedRequest(requestId); - } - - function testFuzz_processBigQueuedRequest_2(uint256 requestId) public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(fundWallet); - tested.processBigQueuedRequest(requestId); - } - - function testFuzz_processBigQueuedRequest_3( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log("Should revert if request already processed or cancelled (inactive)"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Prevent amount from overflowing max withdrawal request amount - amount = bound(amount, 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Request withdrawal for the big amount - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Cancel request - vm.prank(account); - tested.cancelWithdrawalRequest(0); - - // Expect error when trying to process the inactive queued withdrawal - vm.expectRevert(bytes("L66")); - vm.prank(address(fundWallet)); - tested.processBigQueuedRequest(0); - } - - function testFuzz_processBigQueuedRequest_4( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log("Should revert if request emitter has been blacklisted since emission"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount so it doesn't overflow max withdrawal request amount - amount = bound(amount, 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Request withdrawal for the whole amount (big request) - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Blacklist account - globalBlacklist.blacklist(account); - - // Expect revert - vm.expectRevert(bytes("L50")); - vm.prank(address(fundWallet)); - tested.processBigQueuedRequest(0); - } - - function testFuzz_processBigQueuedRequest_5( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log("Should revert if request is not a big request"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount to (0, 100T] - amount = bound(amount, 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Compute a requested amount lower than retention rate (not a big request) - uint256 requestedAmount = tested.getExpectedRetained() / 2; - vm.assume(requestedAmount > 0); - - // Request withdrawal for the non-big amount - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - - // Expect revert - vm.expectRevert(bytes("L51")); - vm.prank(address(fundWallet)); - tested.processBigQueuedRequest(0); - } - - function testFuzz_processBigQueuedRequest_6( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log( - "Should revert withdrawn amount cannot be covered by contract + fund wallet balances" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Cap amount to (0, 100T] - amount = bound(amount, 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Request withdrawal for the non-big amount - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Burn fees amount + 1 from both contract + fund wallet balances - (, uint256 fees) = tested.getWithdrawnAmountAndFees(account, amount); - uint256 burnAmount = fees + 1; - uint256 fundBalance = underlyingToken.balanceOf(fundWallet); - if (burnAmount <= fundBalance) { - vm.prank(fundWallet); - underlyingToken.transfer(address(1234), burnAmount); - } else { - vm.prank(fundWallet); - underlyingToken.transfer(address(1234), fundBalance); - - uint256 remainingToBurn = burnAmount - fundBalance; - vm.prank(address(tested)); - underlyingToken.transfer(address(1234), remainingToBurn); - tested.tool_rawSetUsableUnderlyings(tested.usableUnderlyings() - remainingToBurn); - } - - // Expect revert because 1 token is missing to cover the request - vm.startPrank(address(fundWallet)); - vm.expectRevert(bytes("L52")); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - } - - function testFuzz_processBigQueuedRequest_7( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 amount - ) public { - console.log("Should cover request from fund balance in priority"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - vm.assume(account != fundWallet); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Set fees rate to 0 so it doesn't inter in below tests - tested.setFeesRate(0); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Cap requested amount to max withdrawal request amount - amount = bound(amount, 1, type(uint96).max); - - // Deposit & request amount - deal(address(underlyingToken), account, amount, true); - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Ensure requested amount can be covered by fund wallet - vm.assume(amount <= underlyingToken.balanceOf(fundWallet)); - - // Request withdrawal for the non-big amount - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Ensure that request is a big request - vm.assume(amount > tested.getExpectedRetained() / 2); - - // Store old LToken, fund wallet and account balances for later comparison - uint256 oldLTokenBalance = underlyingToken.balanceOf(address(tested)); - uint256 oldFundWalletBalance = underlyingToken.balanceOf(fundWallet); - uint256 oldAccountBalance = underlyingToken.balanceOf(account); - - // Proceed to big queued withdraw - vm.startPrank(fundWallet); - underlyingToken.approve(address(tested), amount); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - - // LToken contract balance shouldn't have changed - assertEq(underlyingToken.balanceOf(address(tested)), oldLTokenBalance); - - // Fund wallet balance should have decreased by the requested amount - (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees(account, amount); - assertEq(underlyingToken.balanceOf(fundWallet), oldFundWalletBalance - withdrawnAmount); - - // Account balance should have increased by the withdrawn amount - assertEq(underlyingToken.balanceOf(account), oldAccountBalance + withdrawnAmount); - } - - function testFuzz_processBigQueuedRequest_8( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 amount - ) public { - console.log( - "Should use contract tokens to cover request if fund wallet balance is not enough" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - vm.assume(account != fundWallet); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Set fees rate to 0 so it doesn't inter in below tests - tested.setFeesRate(0); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Cap requested amount to max withdrawal request amount - amount = bound(amount, 1, type(uint96).max); - - // Deposit & request amount - deal(address(underlyingToken), account, amount, true); - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Ensure there is some funds both on the contract and the fund wallet - vm.assume(underlyingToken.balanceOf(fundWallet) > 0); - vm.assume(underlyingToken.balanceOf(address(tested)) > 0); - - // Request withdrawal - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Ensure that request is a big request - vm.assume(amount > tested.getExpectedRetained() / 2); - - // Proceed to big queued withdraw - vm.startPrank(fundWallet); - underlyingToken.approve(address(tested), amount); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - - // LToken contract balance shouldn't have changed - assertEq(underlyingToken.balanceOf(address(tested)), 0); - - // Fund wallet balance should have been entirely used - assertEq(underlyingToken.balanceOf(fundWallet), 0); - - // Account balance should have increased by the withdrawn amount - assertEq(underlyingToken.balanceOf(account), amount); - } - - function testFuzz_processBigQueuedRequest_9( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log("Should properly increase unclaimed fees amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Prevent amount from overflowing max withdrawal request amount - amount = bound(amount, 20_000 * 10 ** decimals + 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Request withdrawal for the non-big amount - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Process queued withdrawal - vm.startPrank(address(fundWallet)); - underlyingToken.approve(address(tested), amount); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - - // Assert that unclaimed fees has increased by the expected amount - (, uint256 expectedFees) = tested.getWithdrawnAmountAndFees(account, amount); - assertEq(tested.unclaimedFees(), expectedFees); - } - - function testFuzz_processBigQueuedRequest_10( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log("Should properly decrease queued amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Prevent amount from overflowing max withdrawal request amount - amount = bound(amount, 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Request withdrawal for the non-big amount - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Store old total queued state for later comparison - uint256 oldTotalQueued = tested.totalQueued(); - - // Process queued withdrawal - vm.startPrank(address(fundWallet)); - underlyingToken.approve(address(tested), amount); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - - // Assert that totalQueued has decreased by the expected amount - assertEq(tested.totalQueued(), oldTotalQueued - amount); - } - - function testFuzz_processBigQueuedRequest_11( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint16 feesRateUD7x3, - uint256 amount - ) public { - console.log("Should delete processed request from queue"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account are neither the zero address nor the L-Token contract - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap retention rate to 100% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 100 * 10 ** 3)); - - // Set random retention rate - tested.tool_setRetentionRate(retentionRateUD7x3); - - // Set random fees rate - tested.setFeesRate(feesRateUD7x3); - - // Prevent amount from overflowing max withdrawal request amount - amount = bound(amount, 1, type(uint96).max); - - // Deposit random amount - deal(address(underlyingToken), account, amount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), amount); - tested.deposit(amount, ""); - vm.stopPrank(); - - // Request withdrawal for the non-big amount - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(amount); - - // Process queued withdrawal - vm.startPrank(address(fundWallet)); - underlyingToken.approve(address(tested), amount); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - - // Assert that request has been deleted from queue - (address deletedRequestAccount, uint256 deletedRequestAmount) = tested.withdrawalQueue(0); - assertEq(deletedRequestAccount, address(0)); - assertEq(deletedRequestAmount, 0); - } - - // ==================================== - // === requestWithdrawal() function === - function testFuzz_requestWithdrawal_1(address account, uint256 amount) public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(account); - tested.requestWithdrawal(amount); - } - - function testFuzz_requestWithdrawal_2(address account, uint256 amount) public { - console.log("Should revert if account is blacklisted"); - // Ensure account is not the zero address - vm.assume(account != address(0)); - - // Blacklist account - globalBlacklist.blacklist(account); - - // Expect revert - expectRevertRestricted(); - vm.prank(account); - tested.requestWithdrawal(amount); - } - - function testFuzz_requestWithdrawal_3( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount, - uint256 requestedAmount - ) public { - console.log("Should revert if account hasn't deposited enough funds"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 2, type(uint96).max); - - // Ensure deposited amount is lower than requested amount - depositedAmount = bound(depositedAmount, 1, requestedAmount - 1); - - // Deposit random amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Expect revert when trying to request more than deposited amount - vm.expectRevert(bytes("L53")); - vm.prank(account); - tested.requestWithdrawal(requestedAmount); - } - - function testFuzz_requestWithdrawal_4( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should revert if requested amount is greater than uint96 max"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - // Ternary operator prevents 100T being lower than uint96 max on small decimals numbers - requestedAmount = bound( - requestedAmount, - uint256(type(uint96).max) + 1, - 100_000_000_000_000 * 10 ** decimals > uint256(type(uint96).max) + 1 - ? 100_000_000_000_000 * 10 ** decimals - : uint256(type(uint96).max) + 1 - ); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Expect revert when trying to request more than type(uint96).max - vm.expectRevert(bytes("L54")); - vm.prank(account); - tested.requestWithdrawal(requestedAmount); - } - - function testFuzz_requestWithdrawal_5( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount, - uint256 attachedProcessingFees - ) public { - console.log( - "Should revert if caller has attached more or less than 0.003ETH of processing fees" - ); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Ensure processing fees are different than 0.003ETH - vm.assume(attachedProcessingFees != 0.003 ether); - - // Expect revert when not attaching processing fees - deal(account, attachedProcessingFees); - vm.expectRevert(bytes("L55")); - vm.prank(account); - tested.requestWithdrawal{value: attachedProcessingFees}(requestedAmount); - } - - function testFuzz_requestWithdrawal_6( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should transfer 0.003ETH of processing fees to withdrawer wallet"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - vm.assume(account != address(withdrawerWallet)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Assert the withdrawer wallet balance is 0 - assertEq(address(withdrawerWallet).balance, 0); - - // Assert that account balance is 0.003ETH - assertEq(address(account).balance, processingFees); - - // Request withdrawal - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - - // Assert that withdrawer wallet balance has increased by 0.003ETH - assertEq(address(withdrawerWallet).balance, processingFees); - - // Assert that account balance has decreased by 0.003ETH - assertEq(address(account).balance, 0); - } - - function testFuzz_requestWithdrawal_7( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should burn account withdrawn L-Tokens"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Store old L-Tokens real supply and old account L-Token balance for later comparison - uint256 oldLTokenSupply = tested.realTotalSupply(); - uint256 oldAccountLTokenBalance = tested.balanceOf(account); - - // Request withdrawal - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - - // Assert that L-Token supply has decreased by the requested amount - assertEq(tested.realTotalSupply(), oldLTokenSupply - requestedAmount); - - // Assert that account L-Token balance has decreased by the requested amount - assertEq(tested.balanceOf(account), oldAccountLTokenBalance - requestedAmount); - } - - function testFuzz_requestWithdrawal_8( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log( - "Should properly set caller as request.account and requestedAmount as request.amount" - ); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Request withdrawal - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - - // Retrieve request data - (address requestAccount, uint256 requestAmount) = tested.withdrawalQueue(0); - - // Assert that request account is the caller - assertEq(requestAccount, account); - - // Assert that request amount is the requested amount - assertEq(requestAmount, requestedAmount); - } - - function testFuzz_requestWithdrawal_9( - uint8 decimals, - address account1, - address account2, - uint16 aprUD7x3, - uint256 requestedAmount1, - uint256 requestedAmount2 - ) public { - console.log( - "Should add request at the begining of the queue if caller is elligible to staking tier 2" - ); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure accounts are different, and neither the zero address nor the LToken one - vm.assume(account1 != account2); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account1 != address(tested)); - vm.assume(account2 != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - // ldyStaking.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount1 = bound(requestedAmount1, 1, type(uint96).max); - requestedAmount2 = bound(requestedAmount2, 1, type(uint96).max); - - // Ensure requested amounts are different - vm.assume(requestedAmount1 != requestedAmount2); - - // Store amount of processing fees - uint256 processingFees = 0.003 ether; - - // Account 1 deposit and withdrawal requested - deal(address(underlyingToken), account1, requestedAmount1, true); - deal(account1, processingFees); - vm.startPrank(account1); - underlyingToken.approve(address(tested), requestedAmount1); - tested.deposit(requestedAmount1, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount1); - vm.stopPrank(); - - // Process account 1 first request to withdrwalCursor from 0 - vm.startPrank(address(fundWallet)); - underlyingToken.approve(address(tested), requestedAmount1); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - assertEq(tested.withdrawalQueueCursor(), 1); - - // Emit another account1 deposit and withdrawal request - deal(address(underlyingToken), account1, requestedAmount1, true); - deal(account1, processingFees); - vm.startPrank(account1); - underlyingToken.approve(address(tested), requestedAmount1); - tested.deposit(requestedAmount1, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount1); - vm.stopPrank(); - - // Set tier2Amount - uint256 tier2Amount = 1000 * 10 ** ldyToken.decimals(); - - // Deposit enough $LDY tokens to be eligible to tier 2 - deal(address(ldyToken), account2, tier2Amount, true); - vm.startPrank(account2); - ldyToken.approve(address(ldyStaking), tier2Amount); - ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration - vm.stopPrank(); - - // Assert account is eligible to tier 2 - assertGe(ldyStaking.tierOf(account2), 2); - - // Account 2 deposit and withdrawal requested - deal(address(underlyingToken), account2, requestedAmount2, true); - deal(account2, processingFees); - vm.startPrank(account2); - underlyingToken.approve(address(tested), requestedAmount2); - tested.deposit(requestedAmount2, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount2); - vm.stopPrank(); - - // Assert that the next request in the queue is the one of account 2 - (address requestAccount, uint256 requestAmount) = tested.withdrawalQueue( - tested.withdrawalQueueCursor() - ); - assertEq(requestAccount, account2); - assertEq(requestAmount, requestedAmount2); - } - - function testFuzz_requestWithdrawal_10( - uint8 decimals, - address account1, - address account2, - uint16 aprUD7x3, - uint256 requestedAmount1, - uint256 requestedAmount2 - ) public { - console.log("Should add request at the end of the queue else"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure accounts are different, and neither the zero address nor the LToken one - vm.assume(account1 != account2); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account1 != address(tested)); - vm.assume(account2 != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - // ldyStaking.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount1 = bound(requestedAmount1, 1, type(uint96).max); - requestedAmount2 = bound(requestedAmount2, 1, type(uint96).max); - - // Ensure requested amounts are different - vm.assume(requestedAmount1 != requestedAmount2); - - // Store amount of processing fees - uint256 processingFees = 0.003 ether; - - // Account 1 deposit and withdrawal requested - deal(address(underlyingToken), account1, requestedAmount1, true); - deal(account1, processingFees); - vm.startPrank(account1); - underlyingToken.approve(address(tested), requestedAmount1); - tested.deposit(requestedAmount1, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount1); - vm.stopPrank(); - - // Process account 1 first request to withdrwalCursor from 0 - vm.startPrank(address(fundWallet)); - underlyingToken.approve(address(tested), requestedAmount1); - tested.processBigQueuedRequest(0); - vm.stopPrank(); - assertEq(tested.withdrawalQueueCursor(), 1); - - // Emit another account1 deposit and withdrawal request - deal(address(underlyingToken), account1, requestedAmount1, true); - deal(account1, processingFees); - vm.startPrank(account1); - underlyingToken.approve(address(tested), requestedAmount1); - tested.deposit(requestedAmount1, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount1); - vm.stopPrank(); - - // Ensure account 2 is NOT elligible to staking tier 2 - assertEq(ldyStaking.tierOf(account2), 0); - - // Account 2 deposit and withdrawal requested - deal(address(underlyingToken), account2, requestedAmount2, true); - deal(account2, processingFees); - vm.startPrank(account2); - underlyingToken.approve(address(tested), requestedAmount2); - tested.deposit(requestedAmount2, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount2); - vm.stopPrank(); - - // Assert that the next request in the queue is not the one of account 2 - (address requestAccount, uint256 requestAmount) = tested.withdrawalQueue( - tested.withdrawalQueueCursor() - ); - assertNotEq(requestAccount, account2); - assertNotEq(requestAmount, requestedAmount2); - - // Assert the the account 2 request is the latest of the queue - (requestAccount, requestAmount) = tested.withdrawalQueue( - tested.public_withdrawalQueueLength() - 1 - ); - assertEq(requestAccount, account2); - assertEq(requestAmount, requestedAmount2); - } - - function testFuzz_requestWithdrawal_11( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should properly increase total queued by requested amount"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Request withdrawal - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - - // Assert that totalQueued has increased by the requested amount - assertEq(tested.totalQueued(), requestedAmount); - } - - function testFuzz_requestWithdrawal_12( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should properly transfer processing fees to Withdrawer"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Assert that Withdrawer Ether balance is 0 - assertEq(withdrawerWallet.balance, 0); - - // Request withdrawal - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - - // Assert that Withdrawer Ether balance is now 0.003ETH - assertEq(withdrawerWallet.balance, processingFees); - } - - function testFuzz_requestWithdrawal_13( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should properly revert if transfer processing fees to Withdrawer fails"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit requested amount - deal(address(underlyingToken), account, requestedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - vm.stopPrank(); - - // Mint processing fees to account - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - // Set withdrawer to a contract that reverts on receive - FailingReceiver failingWithdrawer = new FailingReceiver(); - tested.setWithdrawer(payable(address(failingWithdrawer))); - - // Request withdrawal - vm.expectRevert(bytes("L56")); - vm.prank(account); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - } - - // ==================================== - // === cancelWithdrawalRequest() function === - function testFuzz_cancelWithdrawalRequest_1(address account, uint256 requestId) public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(account); - tested.cancelWithdrawalRequest(requestId); - } - - function testFuzz_cancelWithdrawalRequest_2(address account, uint256 requestId) public { - console.log("Should revert if account is blacklisted"); - // Ensure account is not the zero address - vm.assume(account != address(0)); - - // Blacklist account - globalBlacklist.blacklist(account); - - // Expect revert - expectRevertRestricted(); - vm.prank(account); - tested.cancelWithdrawalRequest(requestId); - } - - function testFuzz_cancelWithdrawalRequest_3( - uint8 decimals, - address account1, - address account2, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should revert request doesn't belong to caller"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure accounts are different, and neither the zero address nor the LToken one - vm.assume(account1 != account2); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account1 != address(tested)); - vm.assume(account2 != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit and request amount from account1 - deal(address(underlyingToken), account1, requestedAmount, true); - uint256 processingFees = 0.003 ether; - deal(account1, processingFees); - - vm.startPrank(account1); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - vm.stopPrank(); - - // Assert the request has been created and belongs to account 1 - (address requestAccount, ) = tested.withdrawalQueue(0); - assertEq(requestAccount, account1); - - // Expect revert when trying to cancel the request from account 2 - vm.expectRevert(bytes("L57")); - vm.prank(account2); - tested.cancelWithdrawalRequest(0); - } - - function testFuzz_cancelWithdrawalRequest_4( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should mint back L-Token amount to caller"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit and request amount - deal(address(underlyingToken), account, requestedAmount, true); - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - vm.stopPrank(); - - // Assert that account L-Token balance is currently 0 - assertEq(tested.balanceOf(account), 0); - - // Cancel withdrawal request - vm.prank(account); - tested.cancelWithdrawalRequest(0); - - // Assert that account has received-back its L-Tokens - assertEq(tested.balanceOf(account), requestedAmount); - } - - function testFuzz_cancelWithdrawalRequest_5( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should decrease total queued amount accordingly"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit and request amount - deal(address(underlyingToken), account, requestedAmount, true); - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - vm.stopPrank(); - - // Assert that total queued is equal to requested amount - assertEq(tested.totalQueued(), requestedAmount); - - // Cancel withdrawal request - vm.prank(account); - tested.cancelWithdrawalRequest(0); - - // Assert that total queued has decreased by the requested amount - assertEq(tested.totalQueued(), 0); - } - - function testFuzz_cancelWithdrawalRequest_6( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 requestedAmount - ) public { - console.log("Should delete request from queue"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap requested amount to max withdrawal request amount - requestedAmount = bound(requestedAmount, 1, type(uint96).max); - - // Deposit and request amount - deal(address(underlyingToken), account, requestedAmount, true); - uint256 processingFees = 0.003 ether; - deal(account, processingFees); - - vm.startPrank(account); - underlyingToken.approve(address(tested), requestedAmount); - tested.deposit(requestedAmount, ""); - tested.requestWithdrawal{value: processingFees}(requestedAmount); - vm.stopPrank(); - - // Cancel withdrawal request - vm.prank(account); - tested.cancelWithdrawalRequest(0); - - // Assert cancelled request is now deleted/empty - (address requestAccount, uint256 requestAmount) = tested.withdrawalQueue(0); - assertEq(requestAccount, address(0)); - assertEq(requestAmount, 0); - } - - // ============================= - // === repatriate() function === - function testFuzz_repatriate_1(address account, uint256 requestId) public { - console.log("Should revert if not called by fund wallet"); - - // Ensure the random account is not the fund wallet - vm.assume(account != fundWallet); - - // Expect revert - vm.expectRevert(bytes("L40")); - vm.prank(account); - tested.repatriate(requestId); - } - - function testFuzz_repatriate_2(uint256 requestId) public { - console.log("Should revert if contract is paused"); - globalPause.pause(); - expectRevertPaused(); - vm.prank(fundWallet); - tested.repatriate(requestId); - } - - function testFuzz_repatriate_3( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount, - uint256 fundedAmount - ) public { - console.log("Should revert if the repatriation makes the retention rate exceeding"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap retention rate to 10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 10 * 10 ** 3)); - - // Set random retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 2, type(uint96).max); - - // Deposit amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Ensure funded amount is greater than fund wallet balance - fundedAmount = bound( - fundedAmount, - underlyingToken.balanceOf(fundWallet) + 1, - type(uint256).max - ); - - // Expect revert when trying to fund more than fund wallet balance - vm.expectRevert(bytes("L58")); - vm.prank(fundWallet); - tested.repatriate(fundedAmount); - } - - function testFuzz_repatriate_4( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount, - uint256 fundedAmount - ) public { - console.log("Should revert if the repatriation makes the retention rate exceeding"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap retention rate to 10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 10 * 10 ** 3)); - - // Set random retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 2, type(uint96).max); - - // Deposit amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Ensure funded amount is lower or equal than fund wallet balance - fundedAmount = bound(fundedAmount, 1, underlyingToken.balanceOf(fundWallet)); - - // If expected new usableUnderlyings amount exceeds expected retained - if (fundedAmount + tested.usableUnderlyings() > tested.getExpectedRetained()) { - // Expect revert - vm.expectRevert(bytes("L59")); - vm.prank(fundWallet); - tested.repatriate(fundedAmount); - } - } - - function testFuzz_repatriate_5( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount, - uint256 fundedAmount - ) public { - console.log("Should properly transfer funds from fund to contract else"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap retention rate to 10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 10 * 10 ** 3)); - - // Set random retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 1, type(uint96).max); - - // Deposit amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Force retention rate to 100% so it won't be exceeded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Store old fund wallet and L-token contract underlying balances for later comparison - uint256 oldFundWalletUnderlyingBalance = underlyingToken.balanceOf(fundWallet); - uint256 oldLTokenUnderlyingBalance = underlyingToken.balanceOf(address(tested)); - - // Ensure funded amount is lower or equal than fund wallet balance - fundedAmount = bound(fundedAmount, 0, underlyingToken.balanceOf(fundWallet)); - vm.assume(fundedAmount > 0); - - // Fund L-Token contract - vm.startPrank(fundWallet); - underlyingToken.approve(address(tested), fundedAmount); - tested.repatriate(fundedAmount); - vm.stopPrank(); - - // Assert that fund wallet underlying balance has decreased by the funded amount - assertEq( - underlyingToken.balanceOf(fundWallet), - oldFundWalletUnderlyingBalance - fundedAmount - ); - - // Assert that L-Token contract underlying balance has increased by the funded amount - assertEq( - underlyingToken.balanceOf(address(tested)), - oldLTokenUnderlyingBalance + fundedAmount - ); - } - - function testFuzz_repatriate_6( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint32 retentionRateUD7x3, - uint256 depositedAmount, - uint256 fundedAmount - ) public { - console.log("Should properly transfer funds from fund to contract else"); - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Cap retention rate to 10% - retentionRateUD7x3 = uint32(bound(retentionRateUD7x3, 0, 10 * 10 ** 3)); - - // Set random retention rate - tested.setRetentionRate(retentionRateUD7x3); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 1, type(uint96).max); - - // Deposit amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - vm.stopPrank(); - - // Force retention rate to 100% so it won't be exceeded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Store old usable underlying amount for later comparison - uint256 oldUsableUnderlyings = tested.usableUnderlyings(); - - // Ensure funded amount is lower or equal than fund wallet balance - fundedAmount = bound(fundedAmount, 0, underlyingToken.balanceOf(fundWallet)); - vm.assume(fundedAmount > 0); - - // Fund L-Token contract - vm.startPrank(fundWallet); - underlyingToken.approve(address(tested), fundedAmount); - tested.repatriate(fundedAmount); - vm.stopPrank(); - - // Assert that usable underlying amount has increased by the funded amount - assertEq(tested.usableUnderlyings(), oldUsableUnderlyings + fundedAmount); - } - - // ============================ - // === claimFees() function === - function testFuzz_claimFees_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.claimFees(); - } - - function testFuzz_claimFees_2() public { - console.log("Should revert if there is no unclaimed fees to claim"); - - // Expect revert - vm.expectRevert(bytes("L60")); - tested.claimFees(); - } - - function testFuzz_claimFees_3( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log( - "Should revert if the contract doesn't hold enough underlyingToken to cover unclaimed fees" - ); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so the contract doesn't need to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 1, type(uint96).max); - - // Deposit & request amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Burn 1 underlying tokens to ensure the contract doesn't hold enough to cover unclaimed fees - vm.assume(tested.usableUnderlyings() > 0); - vm.prank(address(tested)); - underlyingToken.transfer(address(1234), 1); - tested.tool_rawSetUsableUnderlyings(tested.usableUnderlyings() - 1); - - // Expect revert - vm.expectRevert(bytes("L61")); - tested.claimFees(); - } - - function testFuzz_claimFees_4( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log("Should properly transfer funds from contract to owner else"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so the contract doesn't need to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 1, type(uint96).max); - - // Deposit & request amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assume there is something to claim - uint256 unclaimedFees = tested.unclaimedFees(); - vm.assume(unclaimedFees > 0); - - // Store old owner and contract underlying balances for later comparison - uint256 oldOwnerUnderlyingBalance = underlyingToken.balanceOf(tested.owner()); - uint256 oldLTokenUnderlyingBalance = underlyingToken.balanceOf(address(tested)); - - // Claim fees - tested.claimFees(); - - // Assert that owner underlying balance has increased by the unclaimed fees - assertEq( - underlyingToken.balanceOf(tested.owner()), - oldOwnerUnderlyingBalance + unclaimedFees - ); - - // Assert that L-Token contract underlying balance has decreased by the unclaimed fees - assertEq( - underlyingToken.balanceOf(address(tested)), - oldLTokenUnderlyingBalance - unclaimedFees - ); - } - - function testFuzz_claimFees_5( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log("Should properly reset unclaimedFees to 0"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so the contract doesn't need to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 1, type(uint96).max); - - // Deposit & request amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assume there is something to claim - uint256 unclaimedFees = tested.unclaimedFees(); - vm.assume(unclaimedFees > 0); - - // Claim fees - tested.claimFees(); - - // Assert unclaimed fees are now 0 - assertEq(tested.unclaimedFees(), 0); - } - - function testFuzz_claimFees_6( - uint8 decimals, - address account, - uint16 aprUD7x3, - uint256 depositedAmount - ) public { - console.log("Should properly decrease usableUnderlyings by claimed fees amount"); - - // Set random underlying token decimals in [0, 18] - decimals = uint8(bound(decimals, 0, 18)); - underlyingToken.setDecimals(decimals); - - // Ensure account is neither the zero address nor the LToken one - vm.assume(account != address(0)); - vm.assume(account != address(tested)); - - // Set first random APRs - tested.setAPR(aprUD7x3); - - // Force retention rate to 100% so the contract doesn't need to be funded - tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); - - // Cap requested amount to max withdrawal request amount - depositedAmount = bound(depositedAmount, 1, type(uint96).max); - - // Deposit & request amount - deal(address(underlyingToken), account, depositedAmount, true); - vm.startPrank(account); - underlyingToken.approve(address(tested), depositedAmount); - tested.deposit(depositedAmount, ""); - tested.instantWithdrawal(depositedAmount); - vm.stopPrank(); - - // Assume there is something to claim - uint256 unclaimedFees = tested.unclaimedFees(); - vm.assume(unclaimedFees > 0); - - // Store usableUnderlyings for later comparison - uint256 oldUsableUnderlyings = tested.usableUnderlyings(); - - // Claim fees - tested.claimFees(); - - // Assert usableUnderlyings has decreased by the claimed fees - assertEq(tested.usableUnderlyings(), oldUsableUnderlyings - unclaimedFees); - } + function testFuzz_processQueuedRequests_14( + uint8 decimals, + uint16 aprUD7x3, + uint8 numberOfRequests, + uint16 feesRateUD7x3, + uint256 amountBase, + uint160 accountBase + ) public { + console.log( + "Should properly increase withdrawal cursor to the next request to be processed" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Force set retention rate to 100% so funds are kept on the contract and it doesn't have to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount of requests to 30 + // The 3 floor is here to ensure that each request is not a big request (each request < 1/2 of expected retained) + numberOfRequests = uint8(bound(numberOfRequests, 3, 30)); + + // Cap amountBase to uint96.max which is the maximum amount of underlying tokens that can be requested at once + amountBase = bound(amountBase, 1, type(uint96).max - 30); + + // Prevent account base from overflowing + accountBase = uint160( + bound(accountBase, 1, type(uint160).max - numberOfRequests) + ); + + // Create random number of requests + for (uint8 i = 0; i < numberOfRequests; i++) { + // Obtain account address + address account = address(accountBase + i); + + // Obtain deposited amount + uint256 amount = amountBase + i; + + // Ensure account is not the L-Token contract + vm.assume(account != address(tested)); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Deposit underlying token amount with another account + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + + // Queue request + tested.requestWithdrawal{ value: processingFees }(amount); + vm.stopPrank(); + } + + // Proceed to batch queued withdraw + vm.prank(withdrawerWallet); + tested.processQueuedRequests(); + + // Assert withdrawal cursor is set to next request to be processed (= queue length) + assertEq( + tested.withdrawalQueueCursor(), + tested.public_withdrawalQueueLength() + ); + } + + function test_processQueuedRequests_15() public { + console.log( + "Should never revert from out of gas and properly end instead" + ); + + // Set decimals to 18 + underlyingToken.setDecimals(18); + + // Set APR to 7% + tested.setAPR(7000); + + // Set retention rate to 100% so it doesn't interfer + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Set fees rate to 0.3% + tested.setFeesRate(300); + + // + uint256 requestsNumber = 5000; + + // Mint enough processing fees to account + uint256 processingFees = 0.003 ether; + deal(address(1234), processingFees * requestsNumber); + + // Give 2000 tokens to test account and deposit those + deal( + address(underlyingToken), + address(1234), + requestsNumber, + true + ); + vm.startPrank(address(1234)); + underlyingToken.approve(address(tested), requestsNumber); + tested.deposit(requestsNumber, ""); + + // Now send 2000 requests of 1 L-token + for (uint256 i = 0; i < requestsNumber; i++) { + // Queue request + tested.requestWithdrawal{ value: processingFees }(1); + } + vm.stopPrank(); + + // Process requests queued withdraw with a limit of 5M + // It should revert from OOG if not prevent by the function + vm.prank(withdrawerWallet); + tested.processQueuedRequests{ gas: 5000000 }(); + + // Assert not all request have been processed + // And so should have reverted from OOG if it didn't properly ended + assertLe(tested.public_withdrawalQueueCursor(), requestsNumber); + assertGt( + tested.public_withdrawalQueueLength(), + tested.public_withdrawalQueueCursor() + ); + } + + // ==================================== + // === processBigQueuedRequest() function === + function testFuzz_processBigQueuedRequest_1( + address account, + uint256 requestId + ) public { + console.log("Should revert if not called by fund wallet"); + + // Ensure the random account is not the fund wallet + vm.assume(account != fundWallet); + + // Expect revert + vm.expectRevert(bytes("L40")); + vm.prank(account); + tested.processBigQueuedRequest(requestId); + } + + function testFuzz_processBigQueuedRequest_2( + uint256 requestId + ) public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(fundWallet); + tested.processBigQueuedRequest(requestId); + } + + function testFuzz_processBigQueuedRequest_3( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log( + "Should revert if request already processed or cancelled (inactive)" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Prevent amount from overflowing max withdrawal request amount + amount = bound(amount, 1, type(uint96).max); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Request withdrawal for the big amount + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Cancel request + vm.prank(account); + tested.cancelWithdrawalRequest(0); + + // Expect error when trying to process the inactive queued withdrawal + vm.expectRevert(bytes("L66")); + vm.prank(address(fundWallet)); + tested.processBigQueuedRequest(0); + } + + function testFuzz_processBigQueuedRequest_4( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log( + "Should revert if request emitter has been blacklisted since emission" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount so it doesn't overflow max withdrawal request amount + amount = bound(amount, 1, type(uint96).max); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Request withdrawal for the whole amount (big request) + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Blacklist account + globalBlacklist.blacklist(account); + + // Expect revert + vm.expectRevert(bytes("L50")); + vm.prank(address(fundWallet)); + tested.processBigQueuedRequest(0); + } + + function testFuzz_processBigQueuedRequest_5( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log("Should revert if request is not a big request"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount to (0, 100T] + amount = bound(amount, 1, type(uint96).max); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Compute a requested amount lower than retention rate (not a big request) + uint256 requestedAmount = tested.getExpectedRetained() / 2; + vm.assume(requestedAmount > 0); + + // Request withdrawal for the non-big amount + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + + // Expect revert + vm.expectRevert(bytes("L51")); + vm.prank(address(fundWallet)); + tested.processBigQueuedRequest(0); + } + + function testFuzz_processBigQueuedRequest_6( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log( + "Should revert withdrawn amount cannot be covered by contract + fund wallet balances" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Cap amount to (0, 100T] + amount = bound(amount, 1, type(uint96).max); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Request withdrawal for the non-big amount + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Burn fees amount + 1 from both contract + fund wallet balances + (, uint256 fees) = tested.getWithdrawnAmountAndFees( + account, + amount + ); + uint256 burnAmount = fees + 1; + uint256 fundBalance = underlyingToken.balanceOf(fundWallet); + if (burnAmount <= fundBalance) { + vm.prank(fundWallet); + underlyingToken.transfer(address(1234), burnAmount); + } else { + vm.prank(fundWallet); + underlyingToken.transfer(address(1234), fundBalance); + + uint256 remainingToBurn = burnAmount - fundBalance; + vm.prank(address(tested)); + underlyingToken.transfer(address(1234), remainingToBurn); + tested.tool_rawSetUsableUnderlyings( + tested.usableUnderlyings() - remainingToBurn + ); + } + + // Expect revert because 1 token is missing to cover the request + vm.startPrank(address(fundWallet)); + vm.expectRevert(bytes("L52")); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + } + + function testFuzz_processBigQueuedRequest_7( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 amount + ) public { + console.log("Should cover request from fund balance in priority"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + vm.assume(account != fundWallet); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Set fees rate to 0 so it doesn't inter in below tests + tested.setFeesRate(0); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Cap requested amount to max withdrawal request amount + amount = bound(amount, 1, type(uint96).max); + + // Deposit & request amount + deal(address(underlyingToken), account, amount, true); + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Ensure requested amount can be covered by fund wallet + vm.assume(amount <= underlyingToken.balanceOf(fundWallet)); + + // Request withdrawal for the non-big amount + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Ensure that request is a big request + vm.assume(amount > tested.getExpectedRetained() / 2); + + // Store old LToken, fund wallet and account balances for later comparison + uint256 oldLTokenBalance = underlyingToken.balanceOf( + address(tested) + ); + uint256 oldFundWalletBalance = underlyingToken.balanceOf( + fundWallet + ); + uint256 oldAccountBalance = underlyingToken.balanceOf(account); + + // Proceed to big queued withdraw + vm.startPrank(fundWallet); + underlyingToken.approve(address(tested), amount); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + + // LToken contract balance shouldn't have changed + assertEq( + underlyingToken.balanceOf(address(tested)), + oldLTokenBalance + ); + + // Fund wallet balance should have decreased by the requested amount + (uint256 withdrawnAmount, ) = tested.getWithdrawnAmountAndFees( + account, + amount + ); + assertEq( + underlyingToken.balanceOf(fundWallet), + oldFundWalletBalance - withdrawnAmount + ); + + // Account balance should have increased by the withdrawn amount + assertEq( + underlyingToken.balanceOf(account), + oldAccountBalance + withdrawnAmount + ); + } + + function testFuzz_processBigQueuedRequest_8( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 amount + ) public { + console.log( + "Should use contract tokens to cover request if fund wallet balance is not enough" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + vm.assume(account != fundWallet); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Set fees rate to 0 so it doesn't inter in below tests + tested.setFeesRate(0); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Cap requested amount to max withdrawal request amount + amount = bound(amount, 1, type(uint96).max); + + // Deposit & request amount + deal(address(underlyingToken), account, amount, true); + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Ensure there is some funds both on the contract and the fund wallet + vm.assume(underlyingToken.balanceOf(fundWallet) > 0); + vm.assume(underlyingToken.balanceOf(address(tested)) > 0); + + // Request withdrawal + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Ensure that request is a big request + vm.assume(amount > tested.getExpectedRetained() / 2); + + // Proceed to big queued withdraw + vm.startPrank(fundWallet); + underlyingToken.approve(address(tested), amount); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + + // LToken contract balance shouldn't have changed + assertEq(underlyingToken.balanceOf(address(tested)), 0); + + // Fund wallet balance should have been entirely used + assertEq(underlyingToken.balanceOf(fundWallet), 0); + + // Account balance should have increased by the withdrawn amount + assertEq(underlyingToken.balanceOf(account), amount); + } + + function testFuzz_processBigQueuedRequest_9( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log("Should properly increase unclaimed fees amount"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Prevent amount from overflowing max withdrawal request amount + amount = bound( + amount, + 20_000 * 10 ** decimals + 1, + type(uint96).max + ); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Request withdrawal for the non-big amount + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Process queued withdrawal + vm.startPrank(address(fundWallet)); + underlyingToken.approve(address(tested), amount); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + + // Assert that unclaimed fees has increased by the expected amount + (, uint256 expectedFees) = tested.getWithdrawnAmountAndFees( + account, + amount + ); + assertEq(tested.unclaimedFees(), expectedFees); + } + + function testFuzz_processBigQueuedRequest_10( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log("Should properly decrease queued amount"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Prevent amount from overflowing max withdrawal request amount + amount = bound(amount, 1, type(uint96).max); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Request withdrawal for the non-big amount + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Store old total queued state for later comparison + uint256 oldTotalQueued = tested.totalQueued(); + + // Process queued withdrawal + vm.startPrank(address(fundWallet)); + underlyingToken.approve(address(tested), amount); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + + // Assert that totalQueued has decreased by the expected amount + assertEq(tested.totalQueued(), oldTotalQueued - amount); + } + + function testFuzz_processBigQueuedRequest_11( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint16 feesRateUD7x3, + uint256 amount + ) public { + console.log("Should delete processed request from queue"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account are neither the zero address nor the L-Token contract + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap retention rate to 100% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 100 * 10 ** 3) + ); + + // Set random retention rate + tested.tool_setRetentionRate(retentionRateUD7x3); + + // Set random fees rate + tested.setFeesRate(feesRateUD7x3); + + // Prevent amount from overflowing max withdrawal request amount + amount = bound(amount, 1, type(uint96).max); + + // Deposit random amount + deal(address(underlyingToken), account, amount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), amount); + tested.deposit(amount, ""); + vm.stopPrank(); + + // Request withdrawal for the non-big amount + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }(amount); + + // Process queued withdrawal + vm.startPrank(address(fundWallet)); + underlyingToken.approve(address(tested), amount); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + + // Assert that request has been deleted from queue + ( + address deletedRequestAccount, + uint256 deletedRequestAmount + ) = tested.withdrawalQueue(0); + assertEq(deletedRequestAccount, address(0)); + assertEq(deletedRequestAmount, 0); + } + + // ==================================== + // === requestWithdrawal() function === + function testFuzz_requestWithdrawal_1( + address account, + uint256 amount + ) public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(account); + tested.requestWithdrawal(amount); + } + + function testFuzz_requestWithdrawal_2( + address account, + uint256 amount + ) public { + console.log("Should revert if account is blacklisted"); + // Ensure account is not the zero address + vm.assume(account != address(0)); + + // Blacklist account + globalBlacklist.blacklist(account); + + // Expect revert + expectRevertRestricted(); + vm.prank(account); + tested.requestWithdrawal(amount); + } + + function testFuzz_requestWithdrawal_3( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount, + uint256 requestedAmount + ) public { + console.log( + "Should revert if account hasn't deposited enough funds" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 2, type(uint96).max); + + // Ensure deposited amount is lower than requested amount + depositedAmount = bound(depositedAmount, 1, requestedAmount - 1); + + // Deposit random amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Expect revert when trying to request more than deposited amount + vm.expectRevert(bytes("L53")); + vm.prank(account); + tested.requestWithdrawal(requestedAmount); + } + + function testFuzz_requestWithdrawal_4( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log( + "Should revert if requested amount is greater than uint96 max" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + // Ternary operator prevents 100T being lower than uint96 max on small decimals numbers + requestedAmount = bound( + requestedAmount, + uint256(type(uint96).max) + 1, + 100_000_000_000_000 * 10 ** decimals > + uint256(type(uint96).max) + 1 + ? 100_000_000_000_000 * 10 ** decimals + : uint256(type(uint96).max) + 1 + ); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Expect revert when trying to request more than type(uint96).max + vm.expectRevert(bytes("L54")); + vm.prank(account); + tested.requestWithdrawal(requestedAmount); + } + + function testFuzz_requestWithdrawal_5( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount, + uint256 attachedProcessingFees + ) public { + console.log( + "Should revert if caller has attached more or less than 0.003ETH of processing fees" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Ensure processing fees are different than 0.003ETH + vm.assume(attachedProcessingFees != 0.003 ether); + + // Expect revert when not attaching processing fees + deal(account, attachedProcessingFees); + vm.expectRevert(bytes("L55")); + vm.prank(account); + tested.requestWithdrawal{ value: attachedProcessingFees }( + requestedAmount + ); + } + + function testFuzz_requestWithdrawal_6( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log( + "Should transfer 0.003ETH of processing fees to withdrawer wallet" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + vm.assume(account != address(withdrawerWallet)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Assert the withdrawer wallet balance is 0 + assertEq(address(withdrawerWallet).balance, 0); + + // Assert that account balance is 0.003ETH + assertEq(address(account).balance, processingFees); + + // Request withdrawal + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + + // Assert that withdrawer wallet balance has increased by 0.003ETH + assertEq(address(withdrawerWallet).balance, processingFees); + + // Assert that account balance has decreased by 0.003ETH + assertEq(address(account).balance, 0); + } + + function testFuzz_requestWithdrawal_7( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log("Should burn account withdrawn L-Tokens"); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Store old L-Tokens real supply and old account L-Token balance for later comparison + uint256 oldLTokenSupply = tested.realTotalSupply(); + uint256 oldAccountLTokenBalance = tested.balanceOf(account); + + // Request withdrawal + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + + // Assert that L-Token supply has decreased by the requested amount + assertEq( + tested.realTotalSupply(), + oldLTokenSupply - requestedAmount + ); + + // Assert that account L-Token balance has decreased by the requested amount + assertEq( + tested.balanceOf(account), + oldAccountLTokenBalance - requestedAmount + ); + } + + function testFuzz_requestWithdrawal_8( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log( + "Should properly set caller as request.account and requestedAmount as request.amount" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Request withdrawal + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + + // Retrieve request data + (address requestAccount, uint256 requestAmount) = tested + .withdrawalQueue(0); + + // Assert that request account is the caller + assertEq(requestAccount, account); + + // Assert that request amount is the requested amount + assertEq(requestAmount, requestedAmount); + } + + function testFuzz_requestWithdrawal_9( + uint8 decimals, + address account1, + address account2, + uint16 aprUD7x3, + uint256 requestedAmount1, + uint256 requestedAmount2 + ) public { + console.log( + "Should add request at the begining of the queue if caller is elligible to staking tier 2" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure accounts are different, and neither the zero address nor the LToken one + vm.assume(account1 != account2); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account1 != address(tested)); + vm.assume(account2 != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + // ldyStaking.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount1 = bound(requestedAmount1, 1, type(uint96).max); + requestedAmount2 = bound(requestedAmount2, 1, type(uint96).max); + + // Ensure requested amounts are different + vm.assume(requestedAmount1 != requestedAmount2); + + // Store amount of processing fees + uint256 processingFees = 0.003 ether; + + // Account 1 deposit and withdrawal requested + deal(address(underlyingToken), account1, requestedAmount1, true); + deal(account1, processingFees); + vm.startPrank(account1); + underlyingToken.approve(address(tested), requestedAmount1); + tested.deposit(requestedAmount1, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount1 + ); + vm.stopPrank(); + + // Process account 1 first request to withdrwalCursor from 0 + vm.startPrank(address(fundWallet)); + underlyingToken.approve(address(tested), requestedAmount1); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + assertEq(tested.withdrawalQueueCursor(), 1); + + // Emit another account1 deposit and withdrawal request + deal(address(underlyingToken), account1, requestedAmount1, true); + deal(account1, processingFees); + vm.startPrank(account1); + underlyingToken.approve(address(tested), requestedAmount1); + tested.deposit(requestedAmount1, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount1 + ); + vm.stopPrank(); + + // Set tier2Amount + uint256 tier2Amount = 1000 * 10 ** ldyToken.decimals(); + + // Deposit enough $LDY tokens to be eligible to tier 2 + deal(address(ldyToken), account2, tier2Amount, true); + vm.startPrank(account2); + ldyToken.approve(address(ldyStaking), tier2Amount); + ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration + vm.stopPrank(); + + // Assert account is eligible to tier 2 + assertGe(ldyStaking.tierOf(account2), 2); + + // Account 2 deposit and withdrawal requested + deal(address(underlyingToken), account2, requestedAmount2, true); + deal(account2, processingFees); + vm.startPrank(account2); + underlyingToken.approve(address(tested), requestedAmount2); + tested.deposit(requestedAmount2, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount2 + ); + vm.stopPrank(); + + // Assert that the next request in the queue is the one of account 2 + (address requestAccount, uint256 requestAmount) = tested + .withdrawalQueue(tested.withdrawalQueueCursor()); + assertEq(requestAccount, account2); + assertEq(requestAmount, requestedAmount2); + } + + function testFuzz_requestWithdrawal_10( + uint8 decimals, + address account1, + address account2, + uint16 aprUD7x3, + uint256 requestedAmount1, + uint256 requestedAmount2 + ) public { + console.log("Should add request at the end of the queue else"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure accounts are different, and neither the zero address nor the LToken one + vm.assume(account1 != account2); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account1 != address(tested)); + vm.assume(account2 != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + // ldyStaking.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount1 = bound(requestedAmount1, 1, type(uint96).max); + requestedAmount2 = bound(requestedAmount2, 1, type(uint96).max); + + // Ensure requested amounts are different + vm.assume(requestedAmount1 != requestedAmount2); + + // Store amount of processing fees + uint256 processingFees = 0.003 ether; + + // Account 1 deposit and withdrawal requested + deal(address(underlyingToken), account1, requestedAmount1, true); + deal(account1, processingFees); + vm.startPrank(account1); + underlyingToken.approve(address(tested), requestedAmount1); + tested.deposit(requestedAmount1, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount1 + ); + vm.stopPrank(); + + // Process account 1 first request to withdrwalCursor from 0 + vm.startPrank(address(fundWallet)); + underlyingToken.approve(address(tested), requestedAmount1); + tested.processBigQueuedRequest(0); + vm.stopPrank(); + assertEq(tested.withdrawalQueueCursor(), 1); + + // Emit another account1 deposit and withdrawal request + deal(address(underlyingToken), account1, requestedAmount1, true); + deal(account1, processingFees); + vm.startPrank(account1); + underlyingToken.approve(address(tested), requestedAmount1); + tested.deposit(requestedAmount1, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount1 + ); + vm.stopPrank(); + + // Ensure account 2 is NOT elligible to staking tier 2 + assertEq(ldyStaking.tierOf(account2), 0); + + // Account 2 deposit and withdrawal requested + deal(address(underlyingToken), account2, requestedAmount2, true); + deal(account2, processingFees); + vm.startPrank(account2); + underlyingToken.approve(address(tested), requestedAmount2); + tested.deposit(requestedAmount2, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount2 + ); + vm.stopPrank(); + + // Assert that the next request in the queue is not the one of account 2 + (address requestAccount, uint256 requestAmount) = tested + .withdrawalQueue(tested.withdrawalQueueCursor()); + assertNotEq(requestAccount, account2); + assertNotEq(requestAmount, requestedAmount2); + + // Assert the the account 2 request is the latest of the queue + (requestAccount, requestAmount) = tested.withdrawalQueue( + tested.public_withdrawalQueueLength() - 1 + ); + assertEq(requestAccount, account2); + assertEq(requestAmount, requestedAmount2); + } + + function testFuzz_requestWithdrawal_11( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log( + "Should properly increase total queued by requested amount" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Request withdrawal + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + + // Assert that totalQueued has increased by the requested amount + assertEq(tested.totalQueued(), requestedAmount); + } + + function testFuzz_requestWithdrawal_12( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log( + "Should properly transfer processing fees to Withdrawer" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Assert that Withdrawer Ether balance is 0 + assertEq(withdrawerWallet.balance, 0); + + // Request withdrawal + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + + // Assert that Withdrawer Ether balance is now 0.003ETH + assertEq(withdrawerWallet.balance, processingFees); + } + + function testFuzz_requestWithdrawal_13( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log( + "Should properly revert if transfer processing fees to Withdrawer fails" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit requested amount + deal(address(underlyingToken), account, requestedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + vm.stopPrank(); + + // Mint processing fees to account + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + // Set withdrawer to a contract that reverts on receive + FailingReceiver failingWithdrawer = new FailingReceiver(); + tested.setWithdrawer(payable(address(failingWithdrawer))); + + // Request withdrawal + vm.expectRevert(bytes("L56")); + vm.prank(account); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + } + + // ==================================== + // === cancelWithdrawalRequest() function === + function testFuzz_cancelWithdrawalRequest_1( + address account, + uint256 requestId + ) public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(account); + tested.cancelWithdrawalRequest(requestId); + } + + function testFuzz_cancelWithdrawalRequest_2( + address account, + uint256 requestId + ) public { + console.log("Should revert if account is blacklisted"); + // Ensure account is not the zero address + vm.assume(account != address(0)); + + // Blacklist account + globalBlacklist.blacklist(account); + + // Expect revert + expectRevertRestricted(); + vm.prank(account); + tested.cancelWithdrawalRequest(requestId); + } + + function testFuzz_cancelWithdrawalRequest_3( + uint8 decimals, + address account1, + address account2, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log("Should revert request doesn't belong to caller"); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure accounts are different, and neither the zero address nor the LToken one + vm.assume(account1 != account2); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account1 != address(tested)); + vm.assume(account2 != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit and request amount from account1 + deal(address(underlyingToken), account1, requestedAmount, true); + uint256 processingFees = 0.003 ether; + deal(account1, processingFees); + + vm.startPrank(account1); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + vm.stopPrank(); + + // Assert the request has been created and belongs to account 1 + (address requestAccount, ) = tested.withdrawalQueue(0); + assertEq(requestAccount, account1); + + // Expect revert when trying to cancel the request from account 2 + vm.expectRevert(bytes("L57")); + vm.prank(account2); + tested.cancelWithdrawalRequest(0); + } + + function testFuzz_cancelWithdrawalRequest_4( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log("Should mint back L-Token amount to caller"); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit and request amount + deal(address(underlyingToken), account, requestedAmount, true); + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + vm.stopPrank(); + + // Assert that account L-Token balance is currently 0 + assertEq(tested.balanceOf(account), 0); + + // Cancel withdrawal request + vm.prank(account); + tested.cancelWithdrawalRequest(0); + + // Assert that account has received-back its L-Tokens + assertEq(tested.balanceOf(account), requestedAmount); + } + + function testFuzz_cancelWithdrawalRequest_5( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log("Should decrease total queued amount accordingly"); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit and request amount + deal(address(underlyingToken), account, requestedAmount, true); + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + vm.stopPrank(); + + // Assert that total queued is equal to requested amount + assertEq(tested.totalQueued(), requestedAmount); + + // Cancel withdrawal request + vm.prank(account); + tested.cancelWithdrawalRequest(0); + + // Assert that total queued has decreased by the requested amount + assertEq(tested.totalQueued(), 0); + } + + function testFuzz_cancelWithdrawalRequest_6( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 requestedAmount + ) public { + console.log("Should delete request from queue"); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap requested amount to max withdrawal request amount + requestedAmount = bound(requestedAmount, 1, type(uint96).max); + + // Deposit and request amount + deal(address(underlyingToken), account, requestedAmount, true); + uint256 processingFees = 0.003 ether; + deal(account, processingFees); + + vm.startPrank(account); + underlyingToken.approve(address(tested), requestedAmount); + tested.deposit(requestedAmount, ""); + tested.requestWithdrawal{ value: processingFees }( + requestedAmount + ); + vm.stopPrank(); + + // Cancel withdrawal request + vm.prank(account); + tested.cancelWithdrawalRequest(0); + + // Assert cancelled request is now deleted/empty + (address requestAccount, uint256 requestAmount) = tested + .withdrawalQueue(0); + assertEq(requestAccount, address(0)); + assertEq(requestAmount, 0); + } + + // ============================= + // === repatriate() function === + function testFuzz_repatriate_1( + address account, + uint256 requestId + ) public { + console.log("Should revert if not called by fund wallet"); + + // Ensure the random account is not the fund wallet + vm.assume(account != fundWallet); + + // Expect revert + vm.expectRevert(bytes("L40")); + vm.prank(account); + tested.repatriate(requestId); + } + + function testFuzz_repatriate_2(uint256 requestId) public { + console.log("Should revert if contract is paused"); + globalPause.pause(); + expectRevertPaused(); + vm.prank(fundWallet); + tested.repatriate(requestId); + } + + function testFuzz_repatriate_3( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount, + uint256 fundedAmount + ) public { + console.log( + "Should revert if the repatriation makes the retention rate exceeding" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap retention rate to 10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + // Set random retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 2, type(uint96).max); + + // Deposit amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Ensure funded amount is greater than fund wallet balance + fundedAmount = bound( + fundedAmount, + underlyingToken.balanceOf(fundWallet) + 1, + type(uint256).max + ); + + // Expect revert when trying to fund more than fund wallet balance + vm.expectRevert(bytes("L58")); + vm.prank(fundWallet); + tested.repatriate(fundedAmount); + } + + function testFuzz_repatriate_4( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount, + uint256 fundedAmount + ) public { + console.log( + "Should revert if the repatriation makes the retention rate exceeding" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap retention rate to 10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + // Set random retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 2, type(uint96).max); + + // Deposit amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Ensure funded amount is lower or equal than fund wallet balance + fundedAmount = bound( + fundedAmount, + 1, + underlyingToken.balanceOf(fundWallet) + ); + + // If expected new usableUnderlyings amount exceeds expected retained + if ( + fundedAmount + tested.usableUnderlyings() > + tested.getExpectedRetained() + ) { + // Expect revert + vm.expectRevert(bytes("L59")); + vm.prank(fundWallet); + tested.repatriate(fundedAmount); + } + } + + function testFuzz_repatriate_5( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount, + uint256 fundedAmount + ) public { + console.log( + "Should properly transfer funds from fund to contract else" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap retention rate to 10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + // Set random retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 1, type(uint96).max); + + // Deposit amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Force retention rate to 100% so it won't be exceeded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Store old fund wallet and L-token contract underlying balances for later comparison + uint256 oldFundWalletUnderlyingBalance = underlyingToken + .balanceOf(fundWallet); + uint256 oldLTokenUnderlyingBalance = underlyingToken.balanceOf( + address(tested) + ); + + // Ensure funded amount is lower or equal than fund wallet balance + fundedAmount = bound( + fundedAmount, + 0, + underlyingToken.balanceOf(fundWallet) + ); + vm.assume(fundedAmount > 0); + + // Fund L-Token contract + vm.startPrank(fundWallet); + underlyingToken.approve(address(tested), fundedAmount); + tested.repatriate(fundedAmount); + vm.stopPrank(); + + // Assert that fund wallet underlying balance has decreased by the funded amount + assertEq( + underlyingToken.balanceOf(fundWallet), + oldFundWalletUnderlyingBalance - fundedAmount + ); + + // Assert that L-Token contract underlying balance has increased by the funded amount + assertEq( + underlyingToken.balanceOf(address(tested)), + oldLTokenUnderlyingBalance + fundedAmount + ); + } + + function testFuzz_repatriate_6( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint32 retentionRateUD7x3, + uint256 depositedAmount, + uint256 fundedAmount + ) public { + console.log( + "Should properly transfer funds from fund to contract else" + ); + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Cap retention rate to 10% + retentionRateUD7x3 = uint32( + bound(retentionRateUD7x3, 0, 10 * 10 ** 3) + ); + + // Set random retention rate + tested.setRetentionRate(retentionRateUD7x3); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 1, type(uint96).max); + + // Deposit amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + vm.stopPrank(); + + // Force retention rate to 100% so it won't be exceeded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Store old usable underlying amount for later comparison + uint256 oldUsableUnderlyings = tested.usableUnderlyings(); + + // Ensure funded amount is lower or equal than fund wallet balance + fundedAmount = bound( + fundedAmount, + 0, + underlyingToken.balanceOf(fundWallet) + ); + vm.assume(fundedAmount > 0); + + // Fund L-Token contract + vm.startPrank(fundWallet); + underlyingToken.approve(address(tested), fundedAmount); + tested.repatriate(fundedAmount); + vm.stopPrank(); + + // Assert that usable underlying amount has increased by the funded amount + assertEq( + tested.usableUnderlyings(), + oldUsableUnderlyings + fundedAmount + ); + } + + // ============================ + // === claimFees() function === + function testFuzz_claimFees_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.claimFees(); + } + + function testFuzz_claimFees_2() public { + console.log( + "Should revert if there is no unclaimed fees to claim" + ); + + // Expect revert + vm.expectRevert(bytes("L60")); + tested.claimFees(); + } + + function testFuzz_claimFees_3( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Should revert if the contract doesn't hold enough underlyingToken to cover unclaimed fees" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so the contract doesn't need to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 1, type(uint96).max); + + // Deposit & request amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Burn 1 underlying tokens to ensure the contract doesn't hold enough to cover unclaimed fees + vm.assume(tested.usableUnderlyings() > 0); + vm.prank(address(tested)); + underlyingToken.transfer(address(1234), 1); + tested.tool_rawSetUsableUnderlyings( + tested.usableUnderlyings() - 1 + ); + + // Expect revert + vm.expectRevert(bytes("L61")); + tested.claimFees(); + } + + function testFuzz_claimFees_4( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Should properly transfer funds from contract to owner else" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so the contract doesn't need to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 1, type(uint96).max); + + // Deposit & request amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assume there is something to claim + uint256 unclaimedFees = tested.unclaimedFees(); + vm.assume(unclaimedFees > 0); + + // Store old owner and contract underlying balances for later comparison + uint256 oldOwnerUnderlyingBalance = underlyingToken.balanceOf( + tested.owner() + ); + uint256 oldLTokenUnderlyingBalance = underlyingToken.balanceOf( + address(tested) + ); + + // Claim fees + tested.claimFees(); + + // Assert that owner underlying balance has increased by the unclaimed fees + assertEq( + underlyingToken.balanceOf(tested.owner()), + oldOwnerUnderlyingBalance + unclaimedFees + ); + + // Assert that L-Token contract underlying balance has decreased by the unclaimed fees + assertEq( + underlyingToken.balanceOf(address(tested)), + oldLTokenUnderlyingBalance - unclaimedFees + ); + } + + function testFuzz_claimFees_5( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log("Should properly reset unclaimedFees to 0"); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so the contract doesn't need to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 1, type(uint96).max); + + // Deposit & request amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assume there is something to claim + uint256 unclaimedFees = tested.unclaimedFees(); + vm.assume(unclaimedFees > 0); + + // Claim fees + tested.claimFees(); + + // Assert unclaimed fees are now 0 + assertEq(tested.unclaimedFees(), 0); + } + + function testFuzz_claimFees_6( + uint8 decimals, + address account, + uint16 aprUD7x3, + uint256 depositedAmount + ) public { + console.log( + "Should properly decrease usableUnderlyings by claimed fees amount" + ); + + // Set random underlying token decimals in [0, 18] + decimals = uint8(bound(decimals, 0, 18)); + underlyingToken.setDecimals(decimals); + + // Ensure account is neither the zero address nor the LToken one + vm.assume(account != address(0)); + vm.assume(account != address(tested)); + + // Set first random APRs + tested.setAPR(aprUD7x3); + + // Force retention rate to 100% so the contract doesn't need to be funded + tested.tool_setRetentionRate(uint32(100 * 10 ** 3)); + + // Cap requested amount to max withdrawal request amount + depositedAmount = bound(depositedAmount, 1, type(uint96).max); + + // Deposit & request amount + deal(address(underlyingToken), account, depositedAmount, true); + vm.startPrank(account); + underlyingToken.approve(address(tested), depositedAmount); + tested.deposit(depositedAmount, ""); + tested.instantWithdrawal(depositedAmount); + vm.stopPrank(); + + // Assume there is something to claim + uint256 unclaimedFees = tested.unclaimedFees(); + vm.assume(unclaimedFees > 0); + + // Store usableUnderlyings for later comparison + uint256 oldUsableUnderlyings = tested.usableUnderlyings(); + + // Claim fees + tested.claimFees(); + + // Assert usableUnderlyings has decreased by the claimed fees + assertEq( + tested.usableUnderlyings(), + oldUsableUnderlyings - unclaimedFees + ); + } } diff --git a/contracts/foundry/test/PreMining.t.sol b/contracts/foundry/test/PreMining.t.sol index e7210abc..539ab8d4 100644 --- a/contracts/foundry/test/PreMining.t.sol +++ b/contracts/foundry/test/PreMining.t.sol @@ -2,2572 +2,2930 @@ pragma solidity ^0.8.18; import "../lib/forge-std/src/Test.sol"; -import {GenericERC20} from "../../src/GenericERC20.sol"; -import {PreMining} from "../../src/PreMining.sol"; -import {LToken} from "../../src/LToken.sol"; -import {GlobalOwner} from "../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../src/GlobalPause.sol"; -import {GlobalBlacklist} from "../../src/GlobalBlacklist.sol"; -import {GenericERC20} from "../../src/GenericERC20.sol"; -import {LDYStaking} from "../../src/LDYStaking.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import {ModifiersExpectations} from "./_helpers/ModifiersExpectations.sol"; +import { GenericERC20 } from "../../src/GenericERC20.sol"; +import { PreMining } from "../../src/PreMining.sol"; +import { LToken } from "../../src/LToken.sol"; +import { GlobalOwner } from "../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../src/GlobalPause.sol"; +import { GlobalBlacklist } from "../../src/GlobalBlacklist.sol"; +import { GenericERC20 } from "../../src/GenericERC20.sol"; +import { LDYStaking } from "../../src/LDYStaking.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ModifiersExpectations } from "./_helpers/ModifiersExpectations.sol"; contract TestedLToken is LToken { - /** - * @dev Uncapped setter for the retention rate - */ - function tool_setRetentionRate(uint32 _retentionRateUD7x3) public { - retentionRateUD7x3 = _retentionRateUD7x3; - } + /** + * @dev Uncapped setter for the retention rate + */ + function tool_setRetentionRate(uint32 _retentionRateUD7x3) public { + retentionRateUD7x3 = _retentionRateUD7x3; + } } contract Tests is Test, ModifiersExpectations { - PreMining tested; - - GenericERC20 ldyToken; - GenericERC20 underlyingToken; - TestedLToken lToken; - - GlobalOwner globalOwner; - GlobalPause globalPause; - GlobalBlacklist globalBlacklist; - LDYStaking ldyStaking; - - uint256 constant DISTRIBUTED_LDY = 10_000_000 * 10 ** 18; - uint256 constant LOCKED_HARD_CAP = type(uint96).max; // Max withdrawal request amount (~100T) - uint8 constant MIN_LOCK_DURATION = 1; - uint8 constant MAX_LOCK_DURATION = 255; - uint8 constant VESTING_DURATION = 12; - - address payable withdrawerWallet = payable(address(bytes20("withdrawerWallet"))); - address payable fundWallet = payable(address(bytes20("fundWallet"))); - - uint256 public constant OneMonth = 31 * 24 * 60 * 60; - LDYStaking.StakeDurationInfo[] public stakingDurationInfos; - - function setUp() public { - // Deploy GenericERC20 (the $LDY token) - ldyToken = new GenericERC20("Ledgity Token", "LDY", 18); - vm.label(address(ldyToken), "LDY token"); - - // Deploy GenericERC20 (the underlying token) - underlyingToken = new GenericERC20("Dummy USD", "DUSD", 18); - vm.label(address(underlyingToken), "Underlying Token"); - - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - GlobalPause impl2 = new GlobalPause(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - globalPause = GlobalPause(address(proxy2)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(0 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(1 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(6 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(12 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(24 * OneMonth, 10000)); - stakingDurationInfos.push(LDYStaking.StakeDurationInfo(36 * OneMonth, 10000)); - - // Deploy LDYStaking - LDYStaking impl4 = new LDYStaking(); - ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); - ldyStaking = LDYStaking(address(proxy4)); - ldyStaking.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyToken), - stakingDurationInfos, - 12 * OneMonth, - 1000 * 1e18 - ); - - // Deploy the L-Token contract - TestedLToken impl5 = new TestedLToken(); - ERC1967Proxy proxy5 = new ERC1967Proxy(address(impl5), ""); - lToken = TestedLToken(address(proxy5)); - lToken.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(ldyStaking), - address(underlyingToken) - ); - vm.label(address(lToken), "LToken"); - - // Set withdrawer wallet - lToken.setWithdrawer(withdrawerWallet); - - // Set fund wallet - lToken.setFund(fundWallet); - - // Deploy the PreMining contract - tested = new PreMining( - address(lToken), - DISTRIBUTED_LDY, - LOCKED_HARD_CAP, - MIN_LOCK_DURATION, - MAX_LOCK_DURATION, - VESTING_DURATION - ); - vm.label(address(ldyToken), "PreMining"); - - // Set the lockdrop contract as high tier account in LDYStaking contract - // This prevents it from having to pay for withdrawal fees - uint256 tier2Amount = 1000 * 10 ** ldyToken.decimals(); - // Deposit enough $LDY tokens to be eligible to tier 2 - deal(address(ldyToken), address(tested), tier2Amount, true); - vm.startPrank(address(tested)); - ldyToken.approve(address(ldyStaking), tier2Amount); - ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration - vm.stopPrank(); - } - - // ============================== - // === constructor() function === - function test_constructor_1() public { - console.log("Should revert if minLockDuration is not at least 1 month"); - - // Expect revert - vm.expectRevert(bytes("L72")); - new PreMining( - address(lToken), - DISTRIBUTED_LDY, - LOCKED_HARD_CAP, - 0, - MAX_LOCK_DURATION, - VESTING_DURATION - ); - } - - function testFuzz_constructor_2(uint8 minLockDuration, uint8 maxLockDuration) public { - console.log("Should revert if minLockDuration is greater than maxLockDuration"); - - // Ensure minLockDuration is at least equal to 1 - minLockDuration = uint8(bound(minLockDuration, 1, type(uint8).max)); - - // Ensure maxLockDuration is lower than minLockDuration - maxLockDuration = uint8(bound(maxLockDuration, 0, minLockDuration - 1)); - - // Expect revert - vm.expectRevert(bytes("L73")); - new PreMining( - address(lToken), - DISTRIBUTED_LDY, - LOCKED_HARD_CAP, - minLockDuration, - maxLockDuration, - VESTING_DURATION - ); - } - - function testFuzz_constructor_3( - uint256 maxDistributedLDY, - uint256 lockedHardCap, - uint8 minLockDuration, - uint8 maxLockDuration, - uint8 vestingDuration - ) public { - console.log("Should properly set immutable states else"); - - // Cap locked hardcap to 100T (prevents overflow) - lockedHardCap = bound(lockedHardCap, 0, 100_000_000_000_000 * 10 ** lToken.decimals()); - - // Ensure minLockDuration is at least equal to 1 - minLockDuration = uint8(bound(minLockDuration, 1, type(uint8).max)); - - // Ensure maxLockDuration is at least equal to minLockDuration - maxLockDuration = uint8(bound(maxLockDuration, minLockDuration, type(uint8).max)); - - // Create a new instance of the PreMining contract - PreMining instance = new PreMining( - address(lToken), - maxDistributedLDY, - lockedHardCap, - minLockDuration, - maxLockDuration, - vestingDuration - ); - - // Assert that the immutable states have been properly set - assertEq(address(instance.lToken()), address(lToken)); - assertEq(address(instance.underlyingToken()), address(underlyingToken)); - assertEq(address(instance.underlyingToken()), address(instance.lToken().underlying())); - assertEq(instance.maxDistributedLDY(), maxDistributedLDY); - assertEq(instance.lockedHardCap(), lockedHardCap); - assertEq(instance.minLockDuration(), minLockDuration); - assertEq(instance.maxLockDuration(), maxLockDuration); - assertEq(instance.vestingDuration(), vestingDuration); - assertEq(instance.maxWeight(), lockedHardCap * uint256(maxLockDuration)); - } - - // ======================== - // === pause() function === - function testFuzz_pause_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.pause(); - } - - function test_pause_2() public { - console.log("Should change output of paused() to 'false' else"); - tested.pause(); - assertEq(tested.paused(), true); - } - - // ========================== - // === unpause() function === - function testFuzz_unpause_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.unpause(); - } - - function test_unpause_2() public { - console.log("Should change output of paused() to 'false' else"); - - tested.pause(); - assertEq(tested.paused(), true); - tested.unpause(); - assertEq(tested.paused(), false); - } - - // ============================== - // === setLDYToken() function === - function testFuzz_setLDYToken_1(address account, address ldyTokenAddress) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the owner wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.setLDYToken(ldyTokenAddress); - } - - function testFuzz_setLDYToken_2(address ldyTokenAddress) public { - console.log("Should revert if Claim phase has started"); - - // Start Claim phase - // (setting LDY address and ending Deposit phase are required by startClaimPhase()) - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Expect revert - vm.expectRevert(bytes("L74")); - tested.setLDYToken(ldyTokenAddress); - } - - function testFuzz_setLDYToken_3(address ldyTokenAddress) public { - console.log("Should properly set LDY token address else"); - - // Set LDY token address - tested.setLDYToken(ldyTokenAddress); - - // Assert that the LDY token address has been properly set - assertEq(address(tested.ldyToken()), ldyTokenAddress); - } - - // ================================== - // === endDepositPhase() function === - function test_endDepositPhase_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the owner wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.endDepositPhase(); - } - - function test_endDepositPhase_2() public { - console.log("Should set hasDepositPhaseEnded to true"); - - // Trigger end of Deposit phase - tested.endDepositPhase(); - - // Assert that the state has been state to true - assertEq(tested.hasDepositPhaseEnded(), true); - } - - // ================================== - // === startClaimPhase() function === - function testFuzz_startClaimPhase_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the owner wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.startClaimPhase(); - } - - function test_startClaimPhase_2() public { - console.log("Should revert if Claim phase has already started"); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Expect revert when trying to start it again - vm.expectRevert(bytes("L76")); - tested.startClaimPhase(); - } - - function test_startClaimPhase_3() public { - console.log("Should revert if LDY token address is unavailable"); - - // End Deposit phase - tested.endDepositPhase(); - - // Expect revert because of LDY token address being unavailable - vm.expectRevert(bytes("L77")); - tested.startClaimPhase(); - } - - function test_startClaimPhase_4() public { - console.log("Should properly set hasClaimPhaseStarted to true"); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Assert that the state has been state to true - assertEq(tested.hasClaimPhaseStarted(), true); - } - - function test_startClaimPhase_6(uint32 time) public { - console.log("Should properly set the Claim phase start timestamp"); - - // Move forward a random amount of time - assertEq(block.timestamp, 1); - skip(time); - assertEq(block.timestamp, uint256(time) + 1); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Assert that the state has been state to true - assertEq(tested.claimPhaseStartTimestamp(), block.timestamp); - } - - // ===================================== - // === startRecoveryPhase() function === - function testFuzz_startRecoveryPhase_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the owner wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.startRecoveryPhase(); - } - - function test_startRecoveryPhase_2() public { - console.log("Should revert if Claim phase has not started yet"); - - // Expect revert - vm.expectRevert(bytes("L79")); - tested.startRecoveryPhase(); - } - - function testFuzz_startRecoveryPhase_3(uint32 time) public { - console.log( - "Should revert if not called at least 3 months after the end of rewards vesting" - ); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Ensure skipped time is before 3 months after the end of rewards vesting - uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; - uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; - uint256 vestingInSecond = tested.vestingDuration() * oneMonthInSeconds; - time = uint32(bound(time, 0, vestingInSecond + threeMonthsInSecond)); - - // Skip a random amount of time - assertEq(block.timestamp, 1); - skip(time); - assertEq(block.timestamp, 1 + uint256(time)); - - // Expect revert - vm.expectRevert(bytes("L80")); - tested.startRecoveryPhase(); - } - - function testFuzz_startRecoveryPhase_4(uint32 time) public { - console.log( - "Should revert if not called at least 3 months after the end of maxiumum lock end" - ); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Ensure skipped time is at least 3 months after the end of rewards vesting - // and before 3 months after the max lock duration end - uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; - uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; - uint256 vestingInSecond = tested.vestingDuration() * oneMonthInSeconds; - uint256 maxLockInSecond = tested.maxLockDuration() * oneMonthInSeconds; - time = uint32( - bound( - time, - vestingInSecond + threeMonthsInSecond, - maxLockInSecond + threeMonthsInSecond - ) - ); - - // Skip a random amount of time - assertEq(block.timestamp, 1); - skip(time); - assertEq(block.timestamp, 1 + uint256(time)); - - // Expect revert - vm.expectRevert(bytes("L81")); - tested.startRecoveryPhase(); - } - - function testFuzz_startRecoveryPhase_5(uint32 time) public { - console.log("Should properly set hasRecoveryPhaseStarted to true"); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Ensure skipped time is at least 3 months after the max lock duration end - uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; - uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; - uint256 maxLockInSecond = tested.maxLockDuration() * oneMonthInSeconds; - time = uint32(bound(time, maxLockInSecond + threeMonthsInSecond, type(uint32).max)); - - // Skip a random amount of time - assertEq(block.timestamp, 1); - skip(time); - assertEq(block.timestamp, 1 + uint256(time)); - - // Start recovery phase - tested.startRecoveryPhase(); - - // Assert that the state has been state to true - assertEq(tested.hasRecoveryPhaseStarted(), true); - } - - // =============================== - // === recoverERC20() function === - function testFuzz_recoverERC20_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the owner wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.recoverERC20(address(0), 0); - } - - function test_recoverERC20_2() public { - console.log("Should revert if Recovery phase has not started yet"); - - // Expect revert - vm.expectRevert(bytes("L82")); - tested.recoverERC20(address(0), 0); - } - - function testFuzz_recoverERC20_3( - uint32 time, - uint256 availableAmount, - uint256 recoveredAmount - ) public { - console.log("Should revert if there is not enough tokens to recover"); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Ensure skipped time is at least 3 months after the max lock duration end - uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; - uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; - uint256 maxLockInSecond = tested.maxLockDuration() * oneMonthInSeconds; - time = uint32(bound(time, maxLockInSecond + threeMonthsInSecond, type(uint32).max)); - - // Skip a random amount of time - assertEq(block.timestamp, 1); - skip(time); - assertEq(block.timestamp, 1 + uint256(time)); - - // Start recovery phase - tested.startRecoveryPhase(); - - // Ensure available amount is lower than recovered amount - recoveredAmount = bound(recoveredAmount, 1, type(uint256).max); - availableAmount = bound(availableAmount, 0, recoveredAmount - 1); - - // Mint available tokens to PreMining contract - deal(address(ldyToken), address(tested), availableAmount, true); - - // Expect revert - vm.expectRevert(bytes("L83")); - tested.recoverERC20(address(ldyToken), recoveredAmount); - } - - function testFuzz_recoverERC20_4( - uint32 time, - uint256 availableAmount, - uint256 recoveredAmount - ) public { - console.log("Should properly transfer recovered tokens to owner else"); - - // Start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Ensure skipped time is at least 3 months after the max lock duration end - uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; - uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; - uint256 maxLockInSecond = tested.maxLockDuration() * oneMonthInSeconds; - time = uint32(bound(time, maxLockInSecond + threeMonthsInSecond, type(uint32).max)); - - // Skip a random amount of time - assertEq(block.timestamp, 1); - skip(time); - assertEq(block.timestamp, 1 + uint256(time)); - - // Start recovery phase - tested.startRecoveryPhase(); - - // Ensure available amount is greater or equal to recovered amount - availableAmount = bound(availableAmount, 0, type(uint256).max); - recoveredAmount = bound(recoveredAmount, 0, availableAmount); - - // Mint available tokens to PreMining contract - deal(address(ldyToken), address(tested), availableAmount, true); - - // Assert current balances of PreMining contract and owner - assertEq(ldyToken.balanceOf(address(tested)), availableAmount); - assertEq(ldyToken.balanceOf(address(this)), 0); - - // Recover ERC20 tokens - tested.recoverERC20(address(ldyToken), recoveredAmount); - - // Assert that the recovered amount has been properly transfered to owner - assertEq(ldyToken.balanceOf(address(tested)), availableAmount - recoveredAmount); - assertEq(ldyToken.balanceOf(address(this)), recoveredAmount); - } - - // ==================================== - // === eligibleRewardsOf() function === - function testFuzz_eligibleRewardsOf_1( - address locker, - uint256 maxDistributedLDY, - uint256 lockedHardCap, - uint8 minLockDuration, - uint8 maxLockDuration, - uint8 vestingDuration, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should properly apply locker's weight"); - - // Ensure locked hardcap is in valid range [-1, +inf] - lockedHardCap = bound(lockedHardCap, 0, 100_000_000_000_000 * 10 ** lToken.decimals()); - - // Ensure minLockDuration is at least equal to 1 - minLockDuration = uint8(bound(minLockDuration, 1, type(uint8).max)); - - // Ensure maxLockDuration is at least equal to minLockDuration - maxLockDuration = uint8(bound(maxLockDuration, minLockDuration, type(uint8).max)); - - // Ensure max distributed LDY is greater than 1 LDY - maxDistributedLDY = bound(maxDistributedLDY, 1000 * 10 ** 18, 10_000_000 * 10 ** 18); - - // Create an instance of PreMining contract without hard cap - PreMining instance = new PreMining( - address(lToken), - maxDistributedLDY, - lockedHardCap, - minLockDuration, - maxLockDuration, - vestingDuration - ); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure locked duration is in bounds - lockDuration = uint8(bound(lockDuration, minLockDuration, maxLockDuration)); - - // Cap locked amount to 100T (prevents overflow) - lockAmount = uint240(bound(lockAmount, 0, lockedHardCap)); - - // Randomly lock some amount for a random duration - deal(address(underlyingToken), locker, lockAmount, true); - vm.startPrank(locker); - underlyingToken.approve(address(instance), lockAmount); - instance.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Retrive eligible rewards of locker - uint256 eligibleRewards = instance.eligibleRewardsOf(locker); - - if (instance.maxWeight() > 0) { - // Compute locker weight from rewards, distributed LDY and maxWeight() - uint256 appliedLockerWeight = (instance.maxWeight() * eligibleRewards) / - maxDistributedLDY; - - // Compute real locker weight - uint256 expectedLockerWeight = lockAmount * lockDuration; - - // Compute difference between applied locker weight and expected one - uint256 weightDiff = appliedLockerWeight > expectedLockerWeight - ? appliedLockerWeight - expectedLockerWeight - : expectedLockerWeight - appliedLockerWeight; - - // Assert that the difference is lower than 1 underlying token locked for 1 month - assertLt(weightDiff, 1 * 10 ** lToken.decimals()); - - // Assert that applied weight is in any case lower or equal to expected one - assertLe(appliedLockerWeight, expectedLockerWeight); - } - } - - function test_eligibleRewardsOf_2( - address locker, - uint256 maxDistributedLDY, - uint256 lockedHardCap, - uint8 minLockDuration, - uint8 maxLockDuration, - uint8 vestingDuration, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should properly apply maxWeight"); - - // Ensure locked hardcap is in valid range [-1, +inf] - lockedHardCap = bound( - lockedHardCap, - 1 * 10 ** lToken.decimals(), - 100_000_000_000_000 * 10 ** lToken.decimals() - ); - - // Ensure minLockDuration is at least equal to 1 - minLockDuration = uint8(bound(minLockDuration, 1, type(uint8).max)); - - // Ensure maxLockDuration is at least equal to minLockDuration - maxLockDuration = uint8(bound(maxLockDuration, minLockDuration, type(uint8).max)); - - // Ensure max distributed LDY is greater than 1000 LDY - maxDistributedLDY = bound(maxDistributedLDY, 1000 * 10 ** 18, 10_000_000 * 10 ** 18); - - // Create an instance of PreMining contract without hard cap - PreMining instance = new PreMining( - address(lToken), - maxDistributedLDY, - lockedHardCap, - minLockDuration, - maxLockDuration, - vestingDuration - ); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure locked duration is in bounds - lockDuration = uint8(bound(lockDuration, minLockDuration, maxLockDuration)); - - // Cap locked amount to 100T (prevents overflow) - lockAmount = uint240(bound(lockAmount, 1 * 10 ** lToken.decimals(), lockedHardCap)); - - // Randomly lock some amount for a random duration - deal(address(underlyingToken), locker, lockAmount, true); - vm.startPrank(locker); - underlyingToken.approve(address(instance), lockAmount); - instance.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Retrive eligible rewards of locker - uint256 eligibleRewards = instance.eligibleRewardsOf(locker); - - if (eligibleRewards > 0) { - // Compute maxWeight from rewards, distributed LDY and locker weight - uint256 lockWeight = lockAmount * lockDuration; - uint256 appliedRefWeight = (maxDistributedLDY * lockWeight) / eligibleRewards; - - // Compute difference between applied locker weight and expected one - uint256 weightDiff = appliedRefWeight > instance.maxWeight() - ? appliedRefWeight - instance.maxWeight() - : instance.maxWeight() - appliedRefWeight; - - // Assert that the difference is lower than 2% of expected maxWeight - assertLe(weightDiff, instance.maxWeight() / 50); - - // Assert that applied weight is in any case greater or equal to expected one - assertGe(appliedRefWeight, instance.maxWeight()); - } - } - - function testFuzz_eligibleRewardsOf_3( - address locker, - uint256 maxDistributedLDY, - uint256 lockedHardCap, - uint8 minLockDuration, - uint8 maxLockDuration, - uint8 vestingDuration, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should properly apply maxDistributedLDY"); - - // Ensure locked hardcap is in valid range [-1, +inf] - lockedHardCap = bound( - lockedHardCap, - 1 * 10 ** lToken.decimals(), - 100_000_000_000_000 * 10 ** lToken.decimals() - ); - - // Ensure minLockDuration is at least equal to 1 - minLockDuration = uint8(bound(minLockDuration, 1, type(uint8).max)); - - // Ensure maxLockDuration is at least equal to minLockDuration - maxLockDuration = uint8(bound(maxLockDuration, minLockDuration, type(uint8).max)); - - // Ensure max distributed LDY is greater than 1 LDY - maxDistributedLDY = bound(maxDistributedLDY, 1000 * 10 ** 18, 10_000_000 * 10 ** 18); - - // Create an instance of PreMining contract without hard cap - PreMining instance = new PreMining( - address(lToken), - maxDistributedLDY, - lockedHardCap, - minLockDuration, - maxLockDuration, - vestingDuration - ); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure locked duration is in bounds - lockDuration = uint8(bound(lockDuration, minLockDuration, maxLockDuration)); - - // Cap locked amount to 100T (prevents overflow) - lockAmount = uint240(bound(lockAmount, 1 * 10 ** lToken.decimals(), lockedHardCap)); - - // Randomly lock some amount for a random duration - deal(address(underlyingToken), locker, lockAmount, true); - vm.startPrank(locker); - underlyingToken.approve(address(instance), lockAmount); - instance.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Retrive eligible rewards of locker - uint256 eligibleRewards = instance.eligibleRewardsOf(locker); - - if (instance.maxWeight() > 0) { - // Compute maxDistributedLDY from rewards, maxWeight and locker weight - uint256 lockWeight = lockAmount * lockDuration; - uint256 appliedMaxDistributedLDY = (eligibleRewards * instance.maxWeight()) / - lockWeight; - - // Compute difference between applied max ditributed LDY amount and expected one - uint256 weightDiff = appliedMaxDistributedLDY > instance.maxDistributedLDY() - ? appliedMaxDistributedLDY - instance.maxDistributedLDY() - : instance.maxDistributedLDY() - appliedMaxDistributedLDY; - - // Assert that the difference is lower than 1% of expected max distributed LDY - assertLe(weightDiff, instance.maxDistributedLDY() / 50); - - // Assert that applied max distributed LDY is in any case lower or equal to expected one - assertLe(appliedMaxDistributedLDY, instance.maxDistributedLDY()); - } - } - - // ======================= - // === lock() function === - function test_lock_1() public { - console.log("Should revert if contract is paused"); - tested.pause(); - expectRevertPaused(); - tested.lock(0, 0); - } - - function testFuzz_lock_2(uint256 amount, uint8 duration) public { - console.log("Should revert if Deposit phase is over"); - - // End Deposit phase - tested.endDepositPhase(); - - // Expect revert - vm.expectRevert(bytes("L84")); - tested.lock(amount, duration); - } - - function testFuzz_lock_3( - uint8 minLockDuration, - uint8 maxLockDuration, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if lock duration is out of bound"); - - // Ensure minLockDuration is at least equal to 1 - minLockDuration = uint8(bound(minLockDuration, 1, type(uint8).max)); - - // Ensure maxLockDuration is at least equal to minLockDuration - maxLockDuration = uint8(bound(maxLockDuration, minLockDuration, type(uint8).max)); - - // Ensure lockDuration is out of bound - vm.assume(lockDuration < minLockDuration || lockDuration > maxLockDuration); - - // Create an instance of PreMining contract - PreMining instance = new PreMining( - address(lToken), - DISTRIBUTED_LDY, - LOCKED_HARD_CAP, - minLockDuration, - maxLockDuration, - VESTING_DURATION - ); - - // Expect revert - vm.expectRevert(bytes("L85")); - instance.lock(lockAmount, lockDuration); - } - - function testFuzz_lock_4(uint256 lockedHardCap, uint240 lockAmount, uint8 lockDuration) public { - console.log("Should revert if deposited amount makes exceeding the hardcap"); - - // Ensure locked amount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, type(uint240).max)); - - // Ensure locked is hardcap lower than locked amount - lockedHardCap = bound(lockedHardCap, 0, lockAmount - 1); - - // Ensure lock duration is at least equal to 1 - vm.assume(lockDuration > 0); - - // Create an instance of PreMining contract - PreMining instance = new PreMining( - address(lToken), - DISTRIBUTED_LDY, - lockedHardCap, - MIN_LOCK_DURATION, - MAX_LOCK_DURATION, - VESTING_DURATION - ); - - // Expect revert - vm.expectRevert(bytes("L86")); - instance.lock(lockAmount, lockDuration); - } - - function testFuzz_lock_5(address locker, uint240 lockAmount, uint8 lockDuration) public { - console.log("Should revert if account has already unlocked in the past"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Force L-Token retention rate to 100% so underlying token are available for instant unlock - lToken.tool_setRetentionRate(100 * 10 ** 3); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Unlock - vm.prank(locker); - tested.instantUnlock(); - - // Shourt revert when trying to lok again - vm.expectRevert(bytes("L71")); - vm.prank(locker); - tested.lock(lockAmount, lockDuration); - } - - function testFuzz_lock_6( - address locker, - uint256 balanceAmount, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if account hasn't enough underlying tokens"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure balanceAmount is lower than lockAmount - balanceAmount = bound(balanceAmount, 0, uint256(lockAmount - 1)); - - // Ensure lock duration is at least equal to 1 - vm.assume(lockDuration > 0); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, balanceAmount, true); - - // Expect revert - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - vm.expectRevert(bytes("ERC20: transfer amount exceeds balance")); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - } - - function testFuzz_lock_7(address locker, uint240 lockAmount, uint8 lockDuration) public { - console.log("Should increase lock's amount by the locked amount"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP) / 2)); - - // Ensure lock duration is at least equal to 1 - vm.assume(lockDuration > 0); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount * 2, true); - - // Assert that lock amount of locker is equal to 0 - (uint240 lockedAmountBefore, , , , ) = tested.accountsLocks(locker); - assertEq(lockedAmountBefore, 0); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Assert that lock amount of locker has increased by lockAmount - (uint240 lockedAmountAfter1, , , , ) = tested.accountsLocks(locker); - assertEq(lockedAmountAfter1, lockAmount); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Assert that lock amount of locker has increased by lockAmount - (uint240 lockedAmountAfter2, , , , ) = tested.accountsLocks(locker); - assertEq(lockedAmountAfter2, lockAmount * 2); - } - - function testFuzz_lock_8(address locker, uint240 lockAmount, uint8 lockDuration) public { - console.log("Should increase the total locked amount by the locked amount"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP) / 2)); - - // Ensure lock duration is at least equal to 1 - vm.assume(lockDuration > 0); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount * 2, true); - - // Assert that total locked amount is equal to 0 - assertEq(tested.totalLocked(), 0); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Assert that total locked amount has increased by lockAmount - assertEq(tested.totalLocked(), lockAmount); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Assert that total locked amount has increased by lockAmount - assertEq(tested.totalLocked(), lockAmount * 2); - } - - function test_lock_9(address locker, uint240 lockAmount, uint8 lockDuration) public { - console.log("Should apply new duration if greater than current one, else keep current one"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP) / 3)); - - // Ensure lock duration is at least equal to 2 and lower than max lock duration - lockDuration = uint8(bound(lockDuration, 2, MAX_LOCK_DURATION - 1)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount * 3, true); - - // Assert locker lock duration and timestamp are 0 - (, uint8 durationBefore, , , uint40 lockEndBefore) = tested.accountsLocks(locker); - assertEq(durationBefore, 0); - assertEq(lockEndBefore, 0); - - // Perform a first lock - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Assert locker lock duration and timestamp have been properly set to first lock duration - (, uint8 durationAfter1, , , uint40 lockEndAfter1) = tested.accountsLocks(locker); - assertEq(durationAfter1, lockDuration); - assertEq( - lockEndAfter1, - uint40(block.timestamp + uint256(lockDuration) * 30 * 24 * 60 * 60) - ); - - // Perform a second lock with a lower duration - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration - 1); - vm.stopPrank(); - - // Assert locker lock duration and timestamp have not changed - (, uint8 durationAfter2, , , uint40 lockEndAfter2) = tested.accountsLocks(locker); - assertEq(durationAfter2, lockDuration); - assertEq(lockEndAfter2, lockEndAfter1); - - // Perform a third lock with a greater duration - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration + 1); - vm.stopPrank(); - - // Assert locker lock duration and timestamp have been properly set to third lock duration - (, uint8 durationAfter3, , , uint40 lockEndAfter3) = tested.accountsLocks(locker); - assertEq(durationAfter3, lockDuration + 1); - assertEq( - lockEndAfter3, - uint40(block.timestamp + uint256(lockDuration + 1) * 30 * 24 * 60 * 60) - ); - } - - function testFuzz_lock_10(address locker, uint240 lockAmount, uint8 lockDuration) public { - console.log("Should deposit amount to L-Token contract if amount > 0"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - vm.assume(locker != address(tested)); - vm.assume(locker != address(lToken)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 0, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 and 2 lower than max lock duration - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION - 2)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Assert current underlying balance of locker is lockAmount - assertEq(underlyingToken.balanceOf(locker), lockAmount); - - // Assert current L-Token balance of PreMining contract is 0 - assertEq(lToken.balanceOf(address(tested)), 0); - - // Assert totalSupply of L-Token contract is 0 - assertEq(lToken.totalSupply(), 0); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Assert current underlying balance of locker is now 0 - assertEq(underlyingToken.balanceOf(locker), 0); - - // Assert current L-Token balance of PreMining contract is now lockAmount - assertEq(lToken.balanceOf(address(tested)), lockAmount); - - // Assert totalSupply of L-Token contract is now lockAmount - assertEq(lToken.totalSupply(), lockAmount); - } - - // ================================ - // === instantUnlock() function === - function test_instantUnlock_1() public { - console.log("Should revert if contract is paused"); - tested.pause(); - expectRevertPaused(); - tested.instantUnlock(); - } - - function testFuzz_instantUnlock_2( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if account's lock has not ended yet"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 0, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Expect revert - vm.expectRevert(bytes("L68")); - vm.prank(locker); - tested.instantUnlock(); - } - - function testFuzz_instantUnlock_3( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if account has already unlocked"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Force L-Token retention rate to 100% so underlying token are available for instant unlock - lToken.tool_setRetentionRate(100 * 10 ** 3); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Unlock a first time - vm.prank(locker); - tested.instantUnlock(); - - // Expect revert on second unlock attempt - vm.expectRevert(bytes("L69")); - vm.prank(locker); - tested.instantUnlock(); - } - - function testFuzz_instantUnlock_4(address locker, uint8 lockDuration) public { - console.log("Should revert if account has nothing to unlock"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Lock amount - vm.startPrank(locker); - tested.lock(0, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Expect revert - vm.expectRevert(bytes("L70")); - vm.prank(locker); - tested.instantUnlock(); - } - - function testFuzz_instantUnlock_5( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should set account's hasUnlocked to true"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Force L-Token retention rate to 100% so underlying token are available for instant unlock - lToken.tool_setRetentionRate(100 * 10 ** 3); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Unlock locked amount - vm.prank(locker); - tested.instantUnlock(); - - // Assert that account hasUnlocked is true - (, , bool hasUnlocked, , ) = tested.accountsLocks(locker); - assertEq(hasUnlocked, true); - } - - function testFuzz_instantUnlock_6( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log( - "Should revert if L-Token doesn't hold enough underlying tokens to cover the request (without considering already queued amount because PreMining contract is elligible to tier 2)" - ); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Except revert for not enough funds on L-Token contract - vm.expectRevert(bytes("L49")); - vm.prank(locker); - tested.instantUnlock(); - } - - function testFuzz_instantUnlock_7( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should withdraw and transfer unlocked underlying tokens to locker"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - vm.assume(locker != address(tested)); - vm.assume(locker != address(lToken)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Force L-Token retention rate to 100% so underlying token are available for instant unlock - lToken.tool_setRetentionRate(100 * 10 ** 3); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Assert current underlying balance of locker is 0 - assertEq(underlyingToken.balanceOf(locker), 0); - - // Assert current L-Token balance of PreMining contract is lockAmount - assertEq(lToken.balanceOf(address(tested)), lockAmount); - - // Assert totalSupply of L-Token contract is lockAmount - assertEq(lToken.totalSupply(), lockAmount); - - // Unlock locked amount - vm.prank(locker); - tested.instantUnlock(); - - // Assert that underlying balance of locker has increased by lockAmount - assertEq(underlyingToken.balanceOf(locker), lockAmount); - - // Assert that L-Token balance of PreMining contract has decreased by lockAmount - assertEq(lToken.balanceOf(address(tested)), 0); - - // Assert that totalSupply of L-Token contract has decreased by lockAmount - assertEq(lToken.totalSupply(), 0); - } - - // ================================ - // === requestUnlock() function === - function test_requestUnlock_1() public { - console.log("Should revert if contract is paused"); - tested.pause(); - expectRevertPaused(); - tested.requestUnlock(); - } - - function testFuzz_requestUnlock_2( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if account's lock has not ended yet"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 0, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Expect revert - vm.expectRevert(bytes("L68")); - vm.prank(locker); - tested.requestUnlock(); - } - - function testFuzz_requestUnlock_3( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if account has already unlocked"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Unlock a first time - deal(locker, 0.003 ether); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - - // Expect revert on second unlock attempt - deal(locker, 0.003 ether); - vm.expectRevert(bytes("L69")); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - } - - function testFuzz_requestUnlock_4(address locker, uint8 lockDuration) public { - console.log("Should revert if account has nothing to unlock"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Lock amount - vm.startPrank(locker); - tested.lock(0, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Expect revert - deal(locker, 0.003 ether); - vm.expectRevert(bytes("L70")); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - } - - function testFuzz_requestUnlock_5( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should set account's hasUnlocked to true"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Unlock amount locked - deal(locker, 0.003 ether); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - - // Assert that account hasUnlocked is true - (, , bool hasUnlocked, , ) = tested.accountsLocks(locker); - assertEq(hasUnlocked, true); - } - - function testFuzz_requestUnlock_6( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should append locker's address to unlock requests queue"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Unlock amount locked - deal(locker, 0.003 ether); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - - // Assert that locker address has been appended to unlock requests queue - assertEq(tested.unlockRequests(0), locker); - } - - function testFuzz_requestUnlock_7( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if not enough processing fees are attached"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Expect revert if attaching 0 processing fees - vm.expectRevert(bytes("L55")); - vm.prank(locker); - tested.requestUnlock{value: 0 ether}(); - } - - function testFuzz_requestUnlock_8( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should revert if too much processing fees are attached"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Expect revert if attaching too much processing fees - deal(locker, 1 ether); - vm.expectRevert(bytes("L55")); - vm.prank(locker); - tested.requestUnlock{value: 1 ether}(); - } - - function testFuzz_requestUnlock_9( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should create a withdrawal request on L-Token contract"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Assert current L-Token balance of PreMining contract is lockAmount - assertEq(lToken.balanceOf(address(tested)), lockAmount); - - // Request to unlock locked amount - deal(locker, 0.003 ether); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - - // Assert L-Token balance of PreMining contract is now 0 - assertEq(lToken.balanceOf(address(tested)), 0); - - // Assert request have been appended at the beginning of the L-Token queue - (address requestAccount, uint96 requestAmount) = lToken.withdrawalQueue(0); - assertEq(requestAccount, address(tested)); - assertEq(requestAmount, uint96(lockAmount)); - } - - // ======================================== - // === processUnlockRequests() function === - function testFuzz_processUnlockRequests_1(address account) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the owner wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.processUnlockRequests(); - } - - function test_processUnlockRequests_2() public { - console.log("Shouldn't change any state and silently end if queue is empty"); - - // End Deposit phase and start Claim phase - tested.setLDYToken(address(ldyToken)); - tested.endDepositPhase(); - tested.startClaimPhase(); - - // Assert that queue cursor is at 0 - assertEq(tested.unlockRequestsCursor(), 0); - - // Process the empty queue - tested.processUnlockRequests(); - - // Assert that queue cursor is still at 0 - assertEq(tested.unlockRequestsCursor(), 0); - } - - function testFuzz_processUnlockRequests_3( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log( - "Shouldn't change any state and hasn't enough fund to cover first next request" - ); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240(bound(lockAmount, 1, uint256(LOCKED_HARD_CAP))); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); - vm.warp(lockEndTimestamp + 1); - - // Request to unlock locked amount - deal(locker, 0.003 ether); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - - // Assert that queue cursor is at 0 - assertEq(tested.unlockRequestsCursor(), 0); - - // Process the queue - tested.processUnlockRequests(); - - // Assert that queue cursor is still at 0 - assertEq(tested.unlockRequestsCursor(), 0); - } - - function testFuzz_processUnlockRequests_5( - address locker1, - address locker2, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log( - "Should silently return when encoutering a request that cannot be covered anymore" - ); - - // Ensure lockers are not the zero address or contracts, and are different - vm.assume(locker1 != address(0)); - vm.assume(locker2 != address(0)); - vm.assume(locker1 != address(lToken)); - vm.assume(locker2 != address(lToken)); - vm.assume(locker1 != address(tested)); - vm.assume(locker2 != address(tested)); - vm.assume(locker1 != locker2); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP) / 2) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to lockers - deal(address(underlyingToken), locker1, lockAmount, true); - deal(address(underlyingToken), locker2, lockAmount, true); - - // Lock amount from locker1 - vm.startPrank(locker1); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Lock amount from locker2 - vm.startPrank(locker2); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); - vm.warp(lockEndTimestamp + 1); - - // Request to unlock locked amount from locker 1 - deal(locker1, 0.003 ether); - vm.prank(locker1); - tested.requestUnlock{value: 0.003 ether}(); - - // Request to unlock locked amount from locker 2 - deal(locker2, 0.003 ether); - vm.prank(locker2); - tested.requestUnlock{value: 0.003 ether}(); - - // Process L-Tokens big requests from fund wallet - vm.startPrank(fundWallet); - lToken.underlying().approve(address(lToken), lockAmount); - lToken.processBigQueuedRequest(0); // Only repatriate funds for the locker1 request - vm.stopPrank(); - // Process queued requests - tested.processUnlockRequests(); - - // Assert that only one request has been processed - assertEq(tested.unlockRequestsCursor(), 1); - - // Assert that locker2 remains in the queue - assertEq(tested.unlockRequests(1), locker2); - } - - function testFuzz_processUnlockRequests_6( - address locker1, - address locker2, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should delete processed requests from queue"); - - // Ensure lockers are not the zero address or contracts, and are different - vm.assume(locker1 != address(0)); - vm.assume(locker2 != address(0)); - vm.assume(locker1 != address(lToken)); - vm.assume(locker2 != address(lToken)); - vm.assume(locker1 != address(tested)); - vm.assume(locker2 != address(tested)); - vm.assume(locker1 != locker2); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP) / 2) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to lockers - deal(address(underlyingToken), locker1, lockAmount, true); - deal(address(underlyingToken), locker2, lockAmount, true); - - // Lock amount from locker1 - vm.startPrank(locker1); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Lock amount from locker2 - vm.startPrank(locker2); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); - vm.warp(lockEndTimestamp + 1); - - // Request to unlock locked amount from locker 1 - deal(locker1, 0.003 ether); - vm.prank(locker1); - tested.requestUnlock{value: 0.003 ether}(); - - // Request to unlock locked amount from locker 2 - deal(locker2, 0.003 ether); - vm.prank(locker2); - tested.requestUnlock{value: 0.003 ether}(); - - // Assert that unlock requests are in the queue - assertEq(tested.unlockRequests(0), locker1); - assertEq(tested.unlockRequests(1), locker2); - - // Process L-Tokens big requests from fund wallet - vm.startPrank(fundWallet); - lToken.underlying().approve(address(lToken), lockAmount * 2); - lToken.processBigQueuedRequest(0); - lToken.processBigQueuedRequest(1); - vm.stopPrank(); - - // Process queued requests - tested.processUnlockRequests(); - - // Assert that requests have been deleted from queue - assertEq(tested.unlockRequests(0), address(0)); - assertEq(tested.unlockRequests(1), address(0)); - } - - function testFuzz_processUnlockRequests_7( - address locker1, - address locker2, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should transfer underlying tokens to lockers"); - - // Ensure lockers are not the zero address or contracts, and are different - vm.assume(locker1 != address(0)); - vm.assume(locker2 != address(0)); - vm.assume(locker1 != address(lToken)); - vm.assume(locker2 != address(lToken)); - vm.assume(locker1 != address(tested)); - vm.assume(locker2 != address(tested)); - vm.assume(locker1 != locker2); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP) / 2) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to lockers - deal(address(underlyingToken), locker1, lockAmount, true); - deal(address(underlyingToken), locker2, lockAmount, true); - - // Lock amount from locker1 - vm.startPrank(locker1); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Lock amount from locker2 - vm.startPrank(locker2); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); - vm.warp(lockEndTimestamp + 1); - - // Request to unlock locked amount from locker 1 - deal(locker1, 0.003 ether); - vm.prank(locker1); - tested.requestUnlock{value: 0.003 ether}(); - - // Request to unlock locked amount from locker 2 - deal(locker2, 0.003 ether); - vm.prank(locker2); - tested.requestUnlock{value: 0.003 ether}(); - - // Process L-Tokens big requests from fund wallet - vm.startPrank(fundWallet); - lToken.underlying().approve(address(lToken), lockAmount * 2); - lToken.processBigQueuedRequest(0); - lToken.processBigQueuedRequest(1); - vm.stopPrank(); - - // Assert lockers balances are 0 - assertEq(underlyingToken.balanceOf(locker1), 0); - assertEq(underlyingToken.balanceOf(locker2), 0); - - // Assert PreMining contract balance is twice the lockAmount - assertEq(underlyingToken.balanceOf(address(tested)), lockAmount * 2); - - // Process queued requests - tested.processUnlockRequests(); - - // Assert lockers balances have increased by lockAmount - assertEq(underlyingToken.balanceOf(locker1), lockAmount); - assertEq(underlyingToken.balanceOf(locker2), lockAmount); - - // Assert PreMining contract balance is now 0 - assertEq(underlyingToken.balanceOf(address(tested)), 0); - } - - function test_processUnlockRequests_8( - address locker1, - address locker2, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should properly increase queue cursor to next request to be processed"); - - // Ensure lockers are not the zero address or contracts, and are different - vm.assume(locker1 != address(0)); - vm.assume(locker2 != address(0)); - vm.assume(locker1 != address(lToken)); - vm.assume(locker2 != address(lToken)); - vm.assume(locker1 != address(tested)); - vm.assume(locker2 != address(tested)); - vm.assume(locker1 != locker2); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP) / 2) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to lockers - deal(address(underlyingToken), locker1, lockAmount, true); - deal(address(underlyingToken), locker2, lockAmount, true); - - // Lock amount from locker1 - vm.startPrank(locker1); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // Lock amount from locker2 - vm.startPrank(locker2); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); - vm.warp(lockEndTimestamp + 1); - - // Request to unlock locked amount from locker 1 - deal(locker1, 0.003 ether); - vm.prank(locker1); - tested.requestUnlock{value: 0.003 ether}(); - - // Request to unlock locked amount from locker 2 - deal(locker2, 0.003 ether); - vm.prank(locker2); - tested.requestUnlock{value: 0.003 ether}(); - - // Process L-Tokens big requests from fund wallet - vm.startPrank(fundWallet); - lToken.underlying().approve(address(lToken), lockAmount * 2); - lToken.processBigQueuedRequest(0); - lToken.processBigQueuedRequest(1); - vm.stopPrank(); - - // Assert unlock queue cursor is currently 0 - assertEq(tested.unlockRequestsCursor(), 0); - - // Process queued requests - tested.processUnlockRequests(); - - // Assert unlock queue cursor is now 2 - assertEq(tested.unlockRequestsCursor(), 2); - } - - function test_processUnlockRequests_9(uint240 lockAmount, uint8 lockDuration) public { - console.log("Should never revert from out of gas and properly end instead"); - - // Store the requests number - uint256 requestsNumber = 100; - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound( - lockAmount, - 1 * 10 ** lToken.decimals(), - uint256(LOCKED_HARD_CAP) / requestsNumber - ) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Create 2000 locks - for (uint160 i = 1; i < requestsNumber; i++) { - // Build locker address - address locker = address(i); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount from locker - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - } - - // End Deposit phase - tested.endDepositPhase(); - - // Ensure lock end is in the past - (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(address(1)); - vm.warp(lockEndTimestamp + 1); - - // Create 2000 unlock requests - for (uint160 i = 1; i < requestsNumber; i++) { - // Build locker address - address locker = address(i); - - // Request to unlock locked amount from locker - deal(locker, 0.003 ether); - vm.prank(locker); - tested.requestUnlock{value: 0.003 ether}(); - } - - // Mint enough underlying tokens to PreMining contract to cover all requests - deal(address(underlyingToken), address(tested), lockAmount * requestsNumber, true); - - // Process queued requests - // It should revert from OOG if not prevent by the function - tested.processUnlockRequests{gas: 1000000}(); - } - - // =================================== - // === availableToClaim() function === - function test_availableToClaim_1( - address locker, - uint240 lockAmount, - uint8 lockDuration, - uint32 elapsedTime - ) public { - console.log("Should properly apply elasped time since Claim phase start"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP)) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Bound elapsed time to vesting duration - uint256 secondsInOneMonth = 30 * 24 * 60 * 60; - elapsedTime = uint32(bound(elapsedTime, 0, tested.vestingDuration() * secondsInOneMonth)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase and start Claim one - tested.endDepositPhase(); - tested.setLDYToken(address(ldyToken)); - tested.startClaimPhase(); - - // Move forward a random elapsed amount in vesting time - skip(elapsedTime); - - // Compute available LDY rewards to claim - uint256 availableRewards = tested.availableToClaim(locker); - - if (tested.eligibleRewardsOf(locker) > 0) { - // Compute applied elapsed time from available rewards, vestingDuration and eligible rewards of - uint256 vestingInSeconds = uint256(tested.vestingDuration()) * secondsInOneMonth; - uint256 appliedElapsedTime = (availableRewards * vestingInSeconds) / - tested.eligibleRewardsOf(locker); - - // Compute difference between applied and expected elapsed time - uint256 elapsedTimeDiff = appliedElapsedTime > elapsedTime - ? appliedElapsedTime - elapsedTime - : elapsedTime - appliedElapsedTime; - - // Assert that difference is less than 1 hour - assertLe(elapsedTimeDiff, 60 * 60); - - // Assert the in despite of imprecision, applied time is never greater than expected - assertLe(appliedElapsedTime, elapsedTime); - } - } - - function test_availableToClaim_2( - address locker, - uint240 lockAmount, - uint8 lockDuration, - uint32 elapsedTime - ) public { - console.log("Should properly apply total eligible rewards of locker"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP)) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Bound elapsed time to vesting duration - uint256 secondsInOneMonth = 30 * 24 * 60 * 60; - elapsedTime = uint32(bound(elapsedTime, 0, tested.vestingDuration() * secondsInOneMonth)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase and start Claim one - tested.endDepositPhase(); - tested.setLDYToken(address(ldyToken)); - tested.startClaimPhase(); - - // Move forward a random elapsed amount in vesting time - skip(elapsedTime); - - // Compute available LDY rewards to claim - uint256 availableRewards = tested.availableToClaim(locker); - - if (elapsedTime > 0) { - // Compute applied eligible rewards of from available rewards, vestingDuration and elapsed time - uint256 vestingInSeconds = uint256(tested.vestingDuration()) * secondsInOneMonth; - uint256 appliedEligibleRewards = (availableRewards * vestingInSeconds) / elapsedTime; - - // Compute difference between applied and expected elapsed time - uint256 eligibleRewardsDiff = appliedEligibleRewards > tested.eligibleRewardsOf(locker) - ? appliedEligibleRewards - tested.eligibleRewardsOf(locker) - : tested.eligibleRewardsOf(locker) - appliedEligibleRewards; - - // Assert that difference is less 1 LDY - assertLe(eligibleRewardsDiff, 1 * 10 ** 18); - - // Assert the in despite of imprecision, applied time is never greater than expected - assertLe(appliedEligibleRewards, tested.eligibleRewardsOf(locker)); - } - } - - function test_availableToClaim_3( - address locker, - uint240 lockAmount, - uint8 lockDuration, - uint32 elapsedTime - ) public { - console.log("Should properly apply vesting duration"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP)) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Bind elapsed time to vesting duration - uint256 secondsInOneMonth = 30 * 24 * 60 * 60; - elapsedTime = uint32(bound(elapsedTime, 0, tested.vestingDuration() * secondsInOneMonth)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase and start Claim one - tested.endDepositPhase(); - tested.setLDYToken(address(ldyToken)); - tested.startClaimPhase(); - - // Move forward a random elapsed amount in vesting time - skip(elapsedTime); - - // Compute available LDY rewards to claim - uint256 availableRewards = tested.availableToClaim(locker); - - if (availableRewards > 0) { - // Compute vesting duration from available rewards, eligible rewards of and elapsed time - uint256 appliedVestingSeconds = (elapsedTime * tested.eligibleRewardsOf(locker)) / - availableRewards; - uint256 appliedVestingDuration = appliedVestingSeconds / secondsInOneMonth; - - // Compute difference between applied and expected vesting duration - uint256 vestingDurationDiff = appliedVestingDuration > tested.vestingDuration() - ? appliedVestingDuration - tested.vestingDuration() - : tested.vestingDuration() - appliedVestingDuration; - - // Assert that difference is less 1 month - assertLe(vestingDurationDiff, 1); - - // Assert the in despite of imprecision, applied vesting duration is never lower than expected - assertGe(appliedVestingDuration, tested.vestingDuration()); - } - } - - function test_availableToClaim_4( - address locker, - uint240 lockAmount, - uint8 lockDuration - ) public { - console.log("Should properly consider already claimed rewards"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP)) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase and start Claim one - tested.endDepositPhase(); - tested.setLDYToken(address(ldyToken)); - tested.startClaimPhase(); - - // Feed lockdrop contract with LDY rewards - deal(address(ldyToken), address(tested), type(uint256).max); - - // Move forward half of vesting duration - uint256 secondsInOneMonth = 30 * 24 * 60 * 60; - skip((tested.vestingDuration() * secondsInOneMonth) / 2); - - // Perform a first rewards claim - vm.prank(locker); - tested.claimRewards(); - - // Move forward the remaining half of vesting duration - skip((tested.vestingDuration() * secondsInOneMonth) / 2); - - // Claim rewards again - vm.prank(locker); - tested.claimRewards(); - - // Assert that available rewards to claim is 0 - assertEq(tested.availableToClaim(locker), 0); - - // Assert that locker has received 100% of its eligible rewards - assertEq(ldyToken.balanceOf(locker), tested.eligibleRewardsOf(locker)); - } - - // =============================== - // === claimRewards() function === - function test_claimRewards_1() public { - console.log("Should revert if contract is paused"); - tested.pause(); - expectRevertPaused(); - tested.claimRewards(); - } - - function test_claimRewards_2() public { - console.log("Should revert if Claim phase has not started yet"); - - // Expect revert - vm.expectRevert(bytes("L87")); - tested.claimRewards(); - } - - function testFuzz_claimRewards_3( - address locker, - uint240 lockAmount, - uint8 lockDuration, - uint32 elapsedTime - ) public { - console.log("Should increase account's claimed rewards by the claimed amount"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP)) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Bind elapsed time to vesting duration - uint256 secondsInOneMonth = 30 * 24 * 60 * 60; - elapsedTime = uint32(bound(elapsedTime, 0, tested.vestingDuration() * secondsInOneMonth)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase and start Claim one - tested.endDepositPhase(); - tested.setLDYToken(address(ldyToken)); - tested.startClaimPhase(); - - // Feed lockdrop contract with LDY rewards - deal(address(ldyToken), address(tested), type(uint256).max); - - // Move forward a random elapsed amount in vesting time - skip(elapsedTime); - - // Assert that current claimed amount of locker is 0 - (, , , uint216 claimedRewardsBefore, ) = tested.accountsLocks(locker); - assertEq(claimedRewardsBefore, 0); - - // Store available to claim amount for later usage - uint256 availableToClaim = tested.availableToClaim(locker); - - // Perform a rewards claim - vm.prank(locker); - tested.claimRewards(); - - // Assert that claimed amount of locker has increased by available to claim amount - (, , , uint216 claimedRewardsAfter, ) = tested.accountsLocks(locker); - assertEq(claimedRewardsAfter, availableToClaim); - - // Assert that available to claim amount is now 0 - assertEq(tested.availableToClaim(locker), 0); - } - - function testFuzz_claimRewards_4( - address locker, - uint240 lockAmount, - uint8 lockDuration, - uint32 elapsedTime - ) public { - console.log("Should transfer claimed rewards to locker"); - - // Ensure locker is not the zero address - vm.assume(locker != address(0)); - - // Ensure lockAmount is at least equal to 1 - lockAmount = uint240( - bound(lockAmount, 1 * 10 ** lToken.decimals(), uint256(LOCKED_HARD_CAP)) - ); - - // Ensure lock duration is at least equal to 1 - lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); - - // Bind elapsed time to vesting duration - uint256 secondsInOneMonth = 30 * 24 * 60 * 60; - elapsedTime = uint32(bound(elapsedTime, 0, tested.vestingDuration() * secondsInOneMonth)); - - // Mint underlying tokens to locker - deal(address(underlyingToken), locker, lockAmount, true); - - // Lock amount - vm.startPrank(locker); - underlyingToken.approve(address(tested), lockAmount); - tested.lock(lockAmount, lockDuration); - vm.stopPrank(); - - // End Deposit phase and start Claim one - tested.endDepositPhase(); - tested.setLDYToken(address(ldyToken)); - tested.startClaimPhase(); - - // Feed lockdrop contract with LDY rewards - deal(address(ldyToken), address(tested), type(uint256).max); - - // Move forward a random elapsed amount in vesting time - skip(elapsedTime); - - // Assert that current locker LDY balance is 0 - assertEq(ldyToken.balanceOf(locker), 0); - - // Store available to claim amount for later usage - uint256 availableToClaim = tested.availableToClaim(locker); - - // Perform a rewards claim - vm.prank(locker); - tested.claimRewards(); - - // Assert that locker LDY balance has increased by available to claim amount - assertEq(ldyToken.balanceOf(locker), availableToClaim); - - // Assert that available to claim amount is now 0 - assertEq(tested.availableToClaim(locker), 0); - } + PreMining tested; + + GenericERC20 ldyToken; + GenericERC20 underlyingToken; + TestedLToken lToken; + + GlobalOwner globalOwner; + GlobalPause globalPause; + GlobalBlacklist globalBlacklist; + LDYStaking ldyStaking; + + uint256 constant DISTRIBUTED_LDY = 10_000_000 * 10 ** 18; + uint256 constant LOCKED_HARD_CAP = type(uint96).max; // Max withdrawal request amount (~100T) + uint8 constant MIN_LOCK_DURATION = 1; + uint8 constant MAX_LOCK_DURATION = 255; + uint8 constant VESTING_DURATION = 12; + + address payable withdrawerWallet = + payable(address(bytes20("withdrawerWallet"))); + address payable fundWallet = + payable(address(bytes20("fundWallet"))); + + uint256 public constant OneMonth = 31 * 24 * 60 * 60; + LDYStaking.StakeDurationInfo[] public stakingDurationInfos; + + function setUp() public { + // Deploy GenericERC20 (the $LDY token) + ldyToken = new GenericERC20("Ledgity Token", "LDY", 18); + vm.label(address(ldyToken), "LDY token"); + + // Deploy GenericERC20 (the underlying token) + underlyingToken = new GenericERC20("Dummy USD", "DUSD", 18); + vm.label(address(underlyingToken), "Underlying Token"); + + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + GlobalPause impl2 = new GlobalPause(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + globalPause = GlobalPause(address(proxy2)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(0 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(1 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(6 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(12 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(24 * OneMonth, 10000) + ); + stakingDurationInfos.push( + LDYStaking.StakeDurationInfo(36 * OneMonth, 10000) + ); + + // Deploy LDYStaking + LDYStaking impl4 = new LDYStaking(); + ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); + ldyStaking = LDYStaking(address(proxy4)); + ldyStaking.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyToken), + stakingDurationInfos, + 12 * OneMonth, + 1000 * 1e18 + ); + + // Deploy the L-Token contract + TestedLToken impl5 = new TestedLToken(); + ERC1967Proxy proxy5 = new ERC1967Proxy(address(impl5), ""); + lToken = TestedLToken(address(proxy5)); + lToken.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(ldyStaking), + address(underlyingToken) + ); + vm.label(address(lToken), "LToken"); + + // Set withdrawer wallet + lToken.setWithdrawer(withdrawerWallet); + + // Set fund wallet + lToken.setFund(fundWallet); + + // Deploy the PreMining contract + tested = new PreMining( + address(lToken), + DISTRIBUTED_LDY, + LOCKED_HARD_CAP, + MIN_LOCK_DURATION, + MAX_LOCK_DURATION, + VESTING_DURATION + ); + vm.label(address(ldyToken), "PreMining"); + + // Set the lockdrop contract as high tier account in LDYStaking contract + // This prevents it from having to pay for withdrawal fees + uint256 tier2Amount = 1000 * 10 ** ldyToken.decimals(); + // Deposit enough $LDY tokens to be eligible to tier 2 + deal(address(ldyToken), address(tested), tier2Amount, true); + vm.startPrank(address(tested)); + ldyToken.approve(address(ldyStaking), tier2Amount); + ldyStaking.stake(tier2Amount, 2); // minimal 1000 tokens with 12 months stakng duration + vm.stopPrank(); + } + + // ============================== + // === constructor() function === + function test_constructor_1() public { + console.log( + "Should revert if minLockDuration is not at least 1 month" + ); + + // Expect revert + vm.expectRevert(bytes("L72")); + new PreMining( + address(lToken), + DISTRIBUTED_LDY, + LOCKED_HARD_CAP, + 0, + MAX_LOCK_DURATION, + VESTING_DURATION + ); + } + + function testFuzz_constructor_2( + uint8 minLockDuration, + uint8 maxLockDuration + ) public { + console.log( + "Should revert if minLockDuration is greater than maxLockDuration" + ); + + // Ensure minLockDuration is at least equal to 1 + minLockDuration = uint8( + bound(minLockDuration, 1, type(uint8).max) + ); + + // Ensure maxLockDuration is lower than minLockDuration + maxLockDuration = uint8( + bound(maxLockDuration, 0, minLockDuration - 1) + ); + + // Expect revert + vm.expectRevert(bytes("L73")); + new PreMining( + address(lToken), + DISTRIBUTED_LDY, + LOCKED_HARD_CAP, + minLockDuration, + maxLockDuration, + VESTING_DURATION + ); + } + + function testFuzz_constructor_3( + uint256 maxDistributedLDY, + uint256 lockedHardCap, + uint8 minLockDuration, + uint8 maxLockDuration, + uint8 vestingDuration + ) public { + console.log("Should properly set immutable states else"); + + // Cap locked hardcap to 100T (prevents overflow) + lockedHardCap = bound( + lockedHardCap, + 0, + 100_000_000_000_000 * 10 ** lToken.decimals() + ); + + // Ensure minLockDuration is at least equal to 1 + minLockDuration = uint8( + bound(minLockDuration, 1, type(uint8).max) + ); + + // Ensure maxLockDuration is at least equal to minLockDuration + maxLockDuration = uint8( + bound(maxLockDuration, minLockDuration, type(uint8).max) + ); + + // Create a new instance of the PreMining contract + PreMining instance = new PreMining( + address(lToken), + maxDistributedLDY, + lockedHardCap, + minLockDuration, + maxLockDuration, + vestingDuration + ); + + // Assert that the immutable states have been properly set + assertEq(address(instance.lToken()), address(lToken)); + assertEq( + address(instance.underlyingToken()), + address(underlyingToken) + ); + assertEq( + address(instance.underlyingToken()), + address(instance.lToken().underlying()) + ); + assertEq(instance.maxDistributedLDY(), maxDistributedLDY); + assertEq(instance.lockedHardCap(), lockedHardCap); + assertEq(instance.minLockDuration(), minLockDuration); + assertEq(instance.maxLockDuration(), maxLockDuration); + assertEq(instance.vestingDuration(), vestingDuration); + assertEq( + instance.maxWeight(), + lockedHardCap * uint256(maxLockDuration) + ); + } + + // ======================== + // === pause() function === + function testFuzz_pause_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.pause(); + } + + function test_pause_2() public { + console.log("Should change output of paused() to 'false' else"); + tested.pause(); + assertEq(tested.paused(), true); + } + + // ========================== + // === unpause() function === + function testFuzz_unpause_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.unpause(); + } + + function test_unpause_2() public { + console.log("Should change output of paused() to 'false' else"); + + tested.pause(); + assertEq(tested.paused(), true); + tested.unpause(); + assertEq(tested.paused(), false); + } + + // ============================== + // === setLDYToken() function === + function testFuzz_setLDYToken_1( + address account, + address ldyTokenAddress + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the owner wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.setLDYToken(ldyTokenAddress); + } + + function testFuzz_setLDYToken_2(address ldyTokenAddress) public { + console.log("Should revert if Claim phase has started"); + + // Start Claim phase + // (setting LDY address and ending Deposit phase are required by startClaimPhase()) + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Expect revert + vm.expectRevert(bytes("L74")); + tested.setLDYToken(ldyTokenAddress); + } + + function testFuzz_setLDYToken_3(address ldyTokenAddress) public { + console.log("Should properly set LDY token address else"); + + // Set LDY token address + tested.setLDYToken(ldyTokenAddress); + + // Assert that the LDY token address has been properly set + assertEq(address(tested.ldyToken()), ldyTokenAddress); + } + + // ================================== + // === endDepositPhase() function === + function test_endDepositPhase_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the owner wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.endDepositPhase(); + } + + function test_endDepositPhase_2() public { + console.log("Should set hasDepositPhaseEnded to true"); + + // Trigger end of Deposit phase + tested.endDepositPhase(); + + // Assert that the state has been state to true + assertEq(tested.hasDepositPhaseEnded(), true); + } + + // ================================== + // === startClaimPhase() function === + function testFuzz_startClaimPhase_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the owner wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.startClaimPhase(); + } + + function test_startClaimPhase_2() public { + console.log("Should revert if Claim phase has already started"); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Expect revert when trying to start it again + vm.expectRevert(bytes("L76")); + tested.startClaimPhase(); + } + + function test_startClaimPhase_3() public { + console.log("Should revert if LDY token address is unavailable"); + + // End Deposit phase + tested.endDepositPhase(); + + // Expect revert because of LDY token address being unavailable + vm.expectRevert(bytes("L77")); + tested.startClaimPhase(); + } + + function test_startClaimPhase_4() public { + console.log("Should properly set hasClaimPhaseStarted to true"); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Assert that the state has been state to true + assertEq(tested.hasClaimPhaseStarted(), true); + } + + function test_startClaimPhase_6(uint32 time) public { + console.log( + "Should properly set the Claim phase start timestamp" + ); + + // Move forward a random amount of time + assertEq(block.timestamp, 1); + skip(time); + assertEq(block.timestamp, uint256(time) + 1); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Assert that the state has been state to true + assertEq(tested.claimPhaseStartTimestamp(), block.timestamp); + } + + // ===================================== + // === startRecoveryPhase() function === + function testFuzz_startRecoveryPhase_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the owner wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.startRecoveryPhase(); + } + + function test_startRecoveryPhase_2() public { + console.log("Should revert if Claim phase has not started yet"); + + // Expect revert + vm.expectRevert(bytes("L79")); + tested.startRecoveryPhase(); + } + + function testFuzz_startRecoveryPhase_3(uint32 time) public { + console.log( + "Should revert if not called at least 3 months after the end of rewards vesting" + ); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Ensure skipped time is before 3 months after the end of rewards vesting + uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; + uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; + uint256 vestingInSecond = tested.vestingDuration() * + oneMonthInSeconds; + time = uint32( + bound(time, 0, vestingInSecond + threeMonthsInSecond) + ); + + // Skip a random amount of time + assertEq(block.timestamp, 1); + skip(time); + assertEq(block.timestamp, 1 + uint256(time)); + + // Expect revert + vm.expectRevert(bytes("L80")); + tested.startRecoveryPhase(); + } + + function testFuzz_startRecoveryPhase_4(uint32 time) public { + console.log( + "Should revert if not called at least 3 months after the end of maxiumum lock end" + ); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Ensure skipped time is at least 3 months after the end of rewards vesting + // and before 3 months after the max lock duration end + uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; + uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; + uint256 vestingInSecond = tested.vestingDuration() * + oneMonthInSeconds; + uint256 maxLockInSecond = tested.maxLockDuration() * + oneMonthInSeconds; + time = uint32( + bound( + time, + vestingInSecond + threeMonthsInSecond, + maxLockInSecond + threeMonthsInSecond + ) + ); + + // Skip a random amount of time + assertEq(block.timestamp, 1); + skip(time); + assertEq(block.timestamp, 1 + uint256(time)); + + // Expect revert + vm.expectRevert(bytes("L81")); + tested.startRecoveryPhase(); + } + + function testFuzz_startRecoveryPhase_5(uint32 time) public { + console.log( + "Should properly set hasRecoveryPhaseStarted to true" + ); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Ensure skipped time is at least 3 months after the max lock duration end + uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; + uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; + uint256 maxLockInSecond = tested.maxLockDuration() * + oneMonthInSeconds; + time = uint32( + bound( + time, + maxLockInSecond + threeMonthsInSecond, + type(uint32).max + ) + ); + + // Skip a random amount of time + assertEq(block.timestamp, 1); + skip(time); + assertEq(block.timestamp, 1 + uint256(time)); + + // Start recovery phase + tested.startRecoveryPhase(); + + // Assert that the state has been state to true + assertEq(tested.hasRecoveryPhaseStarted(), true); + } + + // =============================== + // === recoverERC20() function === + function testFuzz_recoverERC20_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the owner wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.recoverERC20(address(0), 0); + } + + function test_recoverERC20_2() public { + console.log( + "Should revert if Recovery phase has not started yet" + ); + + // Expect revert + vm.expectRevert(bytes("L82")); + tested.recoverERC20(address(0), 0); + } + + function testFuzz_recoverERC20_3( + uint32 time, + uint256 availableAmount, + uint256 recoveredAmount + ) public { + console.log( + "Should revert if there is not enough tokens to recover" + ); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Ensure skipped time is at least 3 months after the max lock duration end + uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; + uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; + uint256 maxLockInSecond = tested.maxLockDuration() * + oneMonthInSeconds; + time = uint32( + bound( + time, + maxLockInSecond + threeMonthsInSecond, + type(uint32).max + ) + ); + + // Skip a random amount of time + assertEq(block.timestamp, 1); + skip(time); + assertEq(block.timestamp, 1 + uint256(time)); + + // Start recovery phase + tested.startRecoveryPhase(); + + // Ensure available amount is lower than recovered amount + recoveredAmount = bound(recoveredAmount, 1, type(uint256).max); + availableAmount = bound(availableAmount, 0, recoveredAmount - 1); + + // Mint available tokens to PreMining contract + deal(address(ldyToken), address(tested), availableAmount, true); + + // Expect revert + vm.expectRevert(bytes("L83")); + tested.recoverERC20(address(ldyToken), recoveredAmount); + } + + function testFuzz_recoverERC20_4( + uint32 time, + uint256 availableAmount, + uint256 recoveredAmount + ) public { + console.log( + "Should properly transfer recovered tokens to owner else" + ); + + // Start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Ensure skipped time is at least 3 months after the max lock duration end + uint256 oneMonthInSeconds = 30 * 24 * 60 * 60; + uint256 threeMonthsInSecond = 3 * oneMonthInSeconds; + uint256 maxLockInSecond = tested.maxLockDuration() * + oneMonthInSeconds; + time = uint32( + bound( + time, + maxLockInSecond + threeMonthsInSecond, + type(uint32).max + ) + ); + + // Skip a random amount of time + assertEq(block.timestamp, 1); + skip(time); + assertEq(block.timestamp, 1 + uint256(time)); + + // Start recovery phase + tested.startRecoveryPhase(); + + // Ensure available amount is greater or equal to recovered amount + availableAmount = bound(availableAmount, 0, type(uint256).max); + recoveredAmount = bound(recoveredAmount, 0, availableAmount); + + // Mint available tokens to PreMining contract + deal(address(ldyToken), address(tested), availableAmount, true); + + // Assert current balances of PreMining contract and owner + assertEq(ldyToken.balanceOf(address(tested)), availableAmount); + assertEq(ldyToken.balanceOf(address(this)), 0); + + // Recover ERC20 tokens + tested.recoverERC20(address(ldyToken), recoveredAmount); + + // Assert that the recovered amount has been properly transfered to owner + assertEq( + ldyToken.balanceOf(address(tested)), + availableAmount - recoveredAmount + ); + assertEq(ldyToken.balanceOf(address(this)), recoveredAmount); + } + + // ==================================== + // === eligibleRewardsOf() function === + function testFuzz_eligibleRewardsOf_1( + address locker, + uint256 maxDistributedLDY, + uint256 lockedHardCap, + uint8 minLockDuration, + uint8 maxLockDuration, + uint8 vestingDuration, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should properly apply locker's weight"); + + // Ensure locked hardcap is in valid range [-1, +inf] + lockedHardCap = bound( + lockedHardCap, + 0, + 100_000_000_000_000 * 10 ** lToken.decimals() + ); + + // Ensure minLockDuration is at least equal to 1 + minLockDuration = uint8( + bound(minLockDuration, 1, type(uint8).max) + ); + + // Ensure maxLockDuration is at least equal to minLockDuration + maxLockDuration = uint8( + bound(maxLockDuration, minLockDuration, type(uint8).max) + ); + + // Ensure max distributed LDY is greater than 1 LDY + maxDistributedLDY = bound( + maxDistributedLDY, + 1000 * 10 ** 18, + 10_000_000 * 10 ** 18 + ); + + // Create an instance of PreMining contract without hard cap + PreMining instance = new PreMining( + address(lToken), + maxDistributedLDY, + lockedHardCap, + minLockDuration, + maxLockDuration, + vestingDuration + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure locked duration is in bounds + lockDuration = uint8( + bound(lockDuration, minLockDuration, maxLockDuration) + ); + + // Cap locked amount to 100T (prevents overflow) + lockAmount = uint240(bound(lockAmount, 0, lockedHardCap)); + + // Randomly lock some amount for a random duration + deal(address(underlyingToken), locker, lockAmount, true); + vm.startPrank(locker); + underlyingToken.approve(address(instance), lockAmount); + instance.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Retrive eligible rewards of locker + uint256 eligibleRewards = instance.eligibleRewardsOf(locker); + + if (instance.maxWeight() > 0) { + // Compute locker weight from rewards, distributed LDY and maxWeight() + uint256 appliedLockerWeight = (instance.maxWeight() * + eligibleRewards) / maxDistributedLDY; + + // Compute real locker weight + uint256 expectedLockerWeight = lockAmount * lockDuration; + + // Compute difference between applied locker weight and expected one + uint256 weightDiff = appliedLockerWeight > expectedLockerWeight + ? appliedLockerWeight - expectedLockerWeight + : expectedLockerWeight - appliedLockerWeight; + + // Assert that the difference is lower than 1 underlying token locked for 1 month + assertLt(weightDiff, 1 * 10 ** lToken.decimals()); + + // Assert that applied weight is in any case lower or equal to expected one + assertLe(appliedLockerWeight, expectedLockerWeight); + } + } + + function test_eligibleRewardsOf_2( + address locker, + uint256 maxDistributedLDY, + uint256 lockedHardCap, + uint8 minLockDuration, + uint8 maxLockDuration, + uint8 vestingDuration, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should properly apply maxWeight"); + + // Ensure locked hardcap is in valid range [-1, +inf] + lockedHardCap = bound( + lockedHardCap, + 1 * 10 ** lToken.decimals(), + 100_000_000_000_000 * 10 ** lToken.decimals() + ); + + // Ensure minLockDuration is at least equal to 1 + minLockDuration = uint8( + bound(minLockDuration, 1, type(uint8).max) + ); + + // Ensure maxLockDuration is at least equal to minLockDuration + maxLockDuration = uint8( + bound(maxLockDuration, minLockDuration, type(uint8).max) + ); + + // Ensure max distributed LDY is greater than 1000 LDY + maxDistributedLDY = bound( + maxDistributedLDY, + 1000 * 10 ** 18, + 10_000_000 * 10 ** 18 + ); + + // Create an instance of PreMining contract without hard cap + PreMining instance = new PreMining( + address(lToken), + maxDistributedLDY, + lockedHardCap, + minLockDuration, + maxLockDuration, + vestingDuration + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure locked duration is in bounds + lockDuration = uint8( + bound(lockDuration, minLockDuration, maxLockDuration) + ); + + // Cap locked amount to 100T (prevents overflow) + lockAmount = uint240( + bound(lockAmount, 1 * 10 ** lToken.decimals(), lockedHardCap) + ); + + // Randomly lock some amount for a random duration + deal(address(underlyingToken), locker, lockAmount, true); + vm.startPrank(locker); + underlyingToken.approve(address(instance), lockAmount); + instance.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Retrive eligible rewards of locker + uint256 eligibleRewards = instance.eligibleRewardsOf(locker); + + if (eligibleRewards > 0) { + // Compute maxWeight from rewards, distributed LDY and locker weight + uint256 lockWeight = lockAmount * lockDuration; + uint256 appliedRefWeight = (maxDistributedLDY * lockWeight) / + eligibleRewards; + + // Compute difference between applied locker weight and expected one + uint256 weightDiff = appliedRefWeight > instance.maxWeight() + ? appliedRefWeight - instance.maxWeight() + : instance.maxWeight() - appliedRefWeight; + + // Assert that the difference is lower than 2% of expected maxWeight + assertLe(weightDiff, instance.maxWeight() / 50); + + // Assert that applied weight is in any case greater or equal to expected one + assertGe(appliedRefWeight, instance.maxWeight()); + } + } + + function testFuzz_eligibleRewardsOf_3( + address locker, + uint256 maxDistributedLDY, + uint256 lockedHardCap, + uint8 minLockDuration, + uint8 maxLockDuration, + uint8 vestingDuration, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should properly apply maxDistributedLDY"); + + // Ensure locked hardcap is in valid range [-1, +inf] + lockedHardCap = bound( + lockedHardCap, + 1 * 10 ** lToken.decimals(), + 100_000_000_000_000 * 10 ** lToken.decimals() + ); + + // Ensure minLockDuration is at least equal to 1 + minLockDuration = uint8( + bound(minLockDuration, 1, type(uint8).max) + ); + + // Ensure maxLockDuration is at least equal to minLockDuration + maxLockDuration = uint8( + bound(maxLockDuration, minLockDuration, type(uint8).max) + ); + + // Ensure max distributed LDY is greater than 1 LDY + maxDistributedLDY = bound( + maxDistributedLDY, + 1000 * 10 ** 18, + 10_000_000 * 10 ** 18 + ); + + // Create an instance of PreMining contract without hard cap + PreMining instance = new PreMining( + address(lToken), + maxDistributedLDY, + lockedHardCap, + minLockDuration, + maxLockDuration, + vestingDuration + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure locked duration is in bounds + lockDuration = uint8( + bound(lockDuration, minLockDuration, maxLockDuration) + ); + + // Cap locked amount to 100T (prevents overflow) + lockAmount = uint240( + bound(lockAmount, 1 * 10 ** lToken.decimals(), lockedHardCap) + ); + + // Randomly lock some amount for a random duration + deal(address(underlyingToken), locker, lockAmount, true); + vm.startPrank(locker); + underlyingToken.approve(address(instance), lockAmount); + instance.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Retrive eligible rewards of locker + uint256 eligibleRewards = instance.eligibleRewardsOf(locker); + + if (instance.maxWeight() > 0) { + // Compute maxDistributedLDY from rewards, maxWeight and locker weight + uint256 lockWeight = lockAmount * lockDuration; + uint256 appliedMaxDistributedLDY = (eligibleRewards * + instance.maxWeight()) / lockWeight; + + // Compute difference between applied max ditributed LDY amount and expected one + uint256 weightDiff = appliedMaxDistributedLDY > + instance.maxDistributedLDY() + ? appliedMaxDistributedLDY - instance.maxDistributedLDY() + : instance.maxDistributedLDY() - appliedMaxDistributedLDY; + + // Assert that the difference is lower than 1% of expected max distributed LDY + assertLe(weightDiff, instance.maxDistributedLDY() / 50); + + // Assert that applied max distributed LDY is in any case lower or equal to expected one + assertLe( + appliedMaxDistributedLDY, + instance.maxDistributedLDY() + ); + } + } + + // ======================= + // === lock() function === + function test_lock_1() public { + console.log("Should revert if contract is paused"); + tested.pause(); + expectRevertPaused(); + tested.lock(0, 0); + } + + function testFuzz_lock_2(uint256 amount, uint8 duration) public { + console.log("Should revert if Deposit phase is over"); + + // End Deposit phase + tested.endDepositPhase(); + + // Expect revert + vm.expectRevert(bytes("L84")); + tested.lock(amount, duration); + } + + function testFuzz_lock_3( + uint8 minLockDuration, + uint8 maxLockDuration, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should revert if lock duration is out of bound"); + + // Ensure minLockDuration is at least equal to 1 + minLockDuration = uint8( + bound(minLockDuration, 1, type(uint8).max) + ); + + // Ensure maxLockDuration is at least equal to minLockDuration + maxLockDuration = uint8( + bound(maxLockDuration, minLockDuration, type(uint8).max) + ); + + // Ensure lockDuration is out of bound + vm.assume( + lockDuration < minLockDuration || lockDuration > maxLockDuration + ); + + // Create an instance of PreMining contract + PreMining instance = new PreMining( + address(lToken), + DISTRIBUTED_LDY, + LOCKED_HARD_CAP, + minLockDuration, + maxLockDuration, + VESTING_DURATION + ); + + // Expect revert + vm.expectRevert(bytes("L85")); + instance.lock(lockAmount, lockDuration); + } + + function testFuzz_lock_4( + uint256 lockedHardCap, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should revert if deposited amount makes exceeding the hardcap" + ); + + // Ensure locked amount is at least equal to 1 + lockAmount = uint240(bound(lockAmount, 1, type(uint240).max)); + + // Ensure locked is hardcap lower than locked amount + lockedHardCap = bound(lockedHardCap, 0, lockAmount - 1); + + // Ensure lock duration is at least equal to 1 + vm.assume(lockDuration > 0); + + // Create an instance of PreMining contract + PreMining instance = new PreMining( + address(lToken), + DISTRIBUTED_LDY, + lockedHardCap, + MIN_LOCK_DURATION, + MAX_LOCK_DURATION, + VESTING_DURATION + ); + + // Expect revert + vm.expectRevert(bytes("L86")); + instance.lock(lockAmount, lockDuration); + } + + function testFuzz_lock_5( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should revert if account has already unlocked in the past" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Force L-Token retention rate to 100% so underlying token are available for instant unlock + lToken.tool_setRetentionRate(100 * 10 ** 3); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Unlock + vm.prank(locker); + tested.instantUnlock(); + + // Shourt revert when trying to lok again + vm.expectRevert(bytes("L71")); + vm.prank(locker); + tested.lock(lockAmount, lockDuration); + } + + function testFuzz_lock_6( + address locker, + uint256 balanceAmount, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should revert if account hasn't enough underlying tokens" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure balanceAmount is lower than lockAmount + balanceAmount = bound(balanceAmount, 0, uint256(lockAmount - 1)); + + // Ensure lock duration is at least equal to 1 + vm.assume(lockDuration > 0); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, balanceAmount, true); + + // Expect revert + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + vm.expectRevert(bytes("ERC20: transfer amount exceeds balance")); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + } + + function testFuzz_lock_7( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should increase lock's amount by the locked amount"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP) / 2) + ); + + // Ensure lock duration is at least equal to 1 + vm.assume(lockDuration > 0); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount * 2, true); + + // Assert that lock amount of locker is equal to 0 + (uint240 lockedAmountBefore, , , , ) = tested.accountsLocks( + locker + ); + assertEq(lockedAmountBefore, 0); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Assert that lock amount of locker has increased by lockAmount + (uint240 lockedAmountAfter1, , , , ) = tested.accountsLocks( + locker + ); + assertEq(lockedAmountAfter1, lockAmount); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Assert that lock amount of locker has increased by lockAmount + (uint240 lockedAmountAfter2, , , , ) = tested.accountsLocks( + locker + ); + assertEq(lockedAmountAfter2, lockAmount * 2); + } + + function testFuzz_lock_8( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should increase the total locked amount by the locked amount" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP) / 2) + ); + + // Ensure lock duration is at least equal to 1 + vm.assume(lockDuration > 0); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount * 2, true); + + // Assert that total locked amount is equal to 0 + assertEq(tested.totalLocked(), 0); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Assert that total locked amount has increased by lockAmount + assertEq(tested.totalLocked(), lockAmount); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Assert that total locked amount has increased by lockAmount + assertEq(tested.totalLocked(), lockAmount * 2); + } + + function test_lock_9( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should apply new duration if greater than current one, else keep current one" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP) / 3) + ); + + // Ensure lock duration is at least equal to 2 and lower than max lock duration + lockDuration = uint8( + bound(lockDuration, 2, MAX_LOCK_DURATION - 1) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount * 3, true); + + // Assert locker lock duration and timestamp are 0 + (, uint8 durationBefore, , , uint40 lockEndBefore) = tested + .accountsLocks(locker); + assertEq(durationBefore, 0); + assertEq(lockEndBefore, 0); + + // Perform a first lock + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Assert locker lock duration and timestamp have been properly set to first lock duration + (, uint8 durationAfter1, , , uint40 lockEndAfter1) = tested + .accountsLocks(locker); + assertEq(durationAfter1, lockDuration); + assertEq( + lockEndAfter1, + uint40( + block.timestamp + uint256(lockDuration) * 30 * 24 * 60 * 60 + ) + ); + + // Perform a second lock with a lower duration + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration - 1); + vm.stopPrank(); + + // Assert locker lock duration and timestamp have not changed + (, uint8 durationAfter2, , , uint40 lockEndAfter2) = tested + .accountsLocks(locker); + assertEq(durationAfter2, lockDuration); + assertEq(lockEndAfter2, lockEndAfter1); + + // Perform a third lock with a greater duration + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration + 1); + vm.stopPrank(); + + // Assert locker lock duration and timestamp have been properly set to third lock duration + (, uint8 durationAfter3, , , uint40 lockEndAfter3) = tested + .accountsLocks(locker); + assertEq(durationAfter3, lockDuration + 1); + assertEq( + lockEndAfter3, + uint40( + block.timestamp + + uint256(lockDuration + 1) * + 30 * + 24 * + 60 * + 60 + ) + ); + } + + function testFuzz_lock_10( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should deposit amount to L-Token contract if amount > 0" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + vm.assume(locker != address(tested)); + vm.assume(locker != address(lToken)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 0, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 and 2 lower than max lock duration + lockDuration = uint8( + bound(lockDuration, 1, MAX_LOCK_DURATION - 2) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Assert current underlying balance of locker is lockAmount + assertEq(underlyingToken.balanceOf(locker), lockAmount); + + // Assert current L-Token balance of PreMining contract is 0 + assertEq(lToken.balanceOf(address(tested)), 0); + + // Assert totalSupply of L-Token contract is 0 + assertEq(lToken.totalSupply(), 0); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Assert current underlying balance of locker is now 0 + assertEq(underlyingToken.balanceOf(locker), 0); + + // Assert current L-Token balance of PreMining contract is now lockAmount + assertEq(lToken.balanceOf(address(tested)), lockAmount); + + // Assert totalSupply of L-Token contract is now lockAmount + assertEq(lToken.totalSupply(), lockAmount); + } + + // ================================ + // === instantUnlock() function === + function test_instantUnlock_1() public { + console.log("Should revert if contract is paused"); + tested.pause(); + expectRevertPaused(); + tested.instantUnlock(); + } + + function testFuzz_instantUnlock_2( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should revert if account's lock has not ended yet"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 0, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Expect revert + vm.expectRevert(bytes("L68")); + vm.prank(locker); + tested.instantUnlock(); + } + + function testFuzz_instantUnlock_3( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should revert if account has already unlocked"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Force L-Token retention rate to 100% so underlying token are available for instant unlock + lToken.tool_setRetentionRate(100 * 10 ** 3); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Unlock a first time + vm.prank(locker); + tested.instantUnlock(); + + // Expect revert on second unlock attempt + vm.expectRevert(bytes("L69")); + vm.prank(locker); + tested.instantUnlock(); + } + + function testFuzz_instantUnlock_4( + address locker, + uint8 lockDuration + ) public { + console.log("Should revert if account has nothing to unlock"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Lock amount + vm.startPrank(locker); + tested.lock(0, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Expect revert + vm.expectRevert(bytes("L70")); + vm.prank(locker); + tested.instantUnlock(); + } + + function testFuzz_instantUnlock_5( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should set account's hasUnlocked to true"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Force L-Token retention rate to 100% so underlying token are available for instant unlock + lToken.tool_setRetentionRate(100 * 10 ** 3); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Unlock locked amount + vm.prank(locker); + tested.instantUnlock(); + + // Assert that account hasUnlocked is true + (, , bool hasUnlocked, , ) = tested.accountsLocks(locker); + assertEq(hasUnlocked, true); + } + + function testFuzz_instantUnlock_6( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should revert if L-Token doesn't hold enough underlying tokens to cover the request (without considering already queued amount because PreMining contract is elligible to tier 2)" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Except revert for not enough funds on L-Token contract + vm.expectRevert(bytes("L49")); + vm.prank(locker); + tested.instantUnlock(); + } + + function testFuzz_instantUnlock_7( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should withdraw and transfer unlocked underlying tokens to locker" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + vm.assume(locker != address(tested)); + vm.assume(locker != address(lToken)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Force L-Token retention rate to 100% so underlying token are available for instant unlock + lToken.tool_setRetentionRate(100 * 10 ** 3); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Assert current underlying balance of locker is 0 + assertEq(underlyingToken.balanceOf(locker), 0); + + // Assert current L-Token balance of PreMining contract is lockAmount + assertEq(lToken.balanceOf(address(tested)), lockAmount); + + // Assert totalSupply of L-Token contract is lockAmount + assertEq(lToken.totalSupply(), lockAmount); + + // Unlock locked amount + vm.prank(locker); + tested.instantUnlock(); + + // Assert that underlying balance of locker has increased by lockAmount + assertEq(underlyingToken.balanceOf(locker), lockAmount); + + // Assert that L-Token balance of PreMining contract has decreased by lockAmount + assertEq(lToken.balanceOf(address(tested)), 0); + + // Assert that totalSupply of L-Token contract has decreased by lockAmount + assertEq(lToken.totalSupply(), 0); + } + + // ================================ + // === requestUnlock() function === + function test_requestUnlock_1() public { + console.log("Should revert if contract is paused"); + tested.pause(); + expectRevertPaused(); + tested.requestUnlock(); + } + + function testFuzz_requestUnlock_2( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should revert if account's lock has not ended yet"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 0, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Expect revert + vm.expectRevert(bytes("L68")); + vm.prank(locker); + tested.requestUnlock(); + } + + function testFuzz_requestUnlock_3( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should revert if account has already unlocked"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Unlock a first time + deal(locker, 0.003 ether); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + + // Expect revert on second unlock attempt + deal(locker, 0.003 ether); + vm.expectRevert(bytes("L69")); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + } + + function testFuzz_requestUnlock_4( + address locker, + uint8 lockDuration + ) public { + console.log("Should revert if account has nothing to unlock"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Lock amount + vm.startPrank(locker); + tested.lock(0, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Expect revert + deal(locker, 0.003 ether); + vm.expectRevert(bytes("L70")); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + } + + function testFuzz_requestUnlock_5( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should set account's hasUnlocked to true"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Unlock amount locked + deal(locker, 0.003 ether); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + + // Assert that account hasUnlocked is true + (, , bool hasUnlocked, , ) = tested.accountsLocks(locker); + assertEq(hasUnlocked, true); + } + + function testFuzz_requestUnlock_6( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should append locker's address to unlock requests queue" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Unlock amount locked + deal(locker, 0.003 ether); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + + // Assert that locker address has been appended to unlock requests queue + assertEq(tested.unlockRequests(0), locker); + } + + function testFuzz_requestUnlock_7( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should revert if not enough processing fees are attached" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Expect revert if attaching 0 processing fees + vm.expectRevert(bytes("L55")); + vm.prank(locker); + tested.requestUnlock{ value: 0 ether }(); + } + + function testFuzz_requestUnlock_8( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should revert if too much processing fees are attached" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Expect revert if attaching too much processing fees + deal(locker, 1 ether); + vm.expectRevert(bytes("L55")); + vm.prank(locker); + tested.requestUnlock{ value: 1 ether }(); + } + + function testFuzz_requestUnlock_9( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should create a withdrawal request on L-Token contract" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Assert current L-Token balance of PreMining contract is lockAmount + assertEq(lToken.balanceOf(address(tested)), lockAmount); + + // Request to unlock locked amount + deal(locker, 0.003 ether); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + + // Assert L-Token balance of PreMining contract is now 0 + assertEq(lToken.balanceOf(address(tested)), 0); + + // Assert request have been appended at the beginning of the L-Token queue + (address requestAccount, uint96 requestAmount) = lToken + .withdrawalQueue(0); + assertEq(requestAccount, address(tested)); + assertEq(requestAmount, uint96(lockAmount)); + } + + // ======================================== + // === processUnlockRequests() function === + function testFuzz_processUnlockRequests_1(address account) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the owner wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.processUnlockRequests(); + } + + function test_processUnlockRequests_2() public { + console.log( + "Shouldn't change any state and silently end if queue is empty" + ); + + // End Deposit phase and start Claim phase + tested.setLDYToken(address(ldyToken)); + tested.endDepositPhase(); + tested.startClaimPhase(); + + // Assert that queue cursor is at 0 + assertEq(tested.unlockRequestsCursor(), 0); + + // Process the empty queue + tested.processUnlockRequests(); + + // Assert that queue cursor is still at 0 + assertEq(tested.unlockRequestsCursor(), 0); + } + + function testFuzz_processUnlockRequests_3( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Shouldn't change any state and hasn't enough fund to cover first next request" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound(lockAmount, 1, uint256(LOCKED_HARD_CAP)) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker); + vm.warp(lockEndTimestamp + 1); + + // Request to unlock locked amount + deal(locker, 0.003 ether); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + + // Assert that queue cursor is at 0 + assertEq(tested.unlockRequestsCursor(), 0); + + // Process the queue + tested.processUnlockRequests(); + + // Assert that queue cursor is still at 0 + assertEq(tested.unlockRequestsCursor(), 0); + } + + function testFuzz_processUnlockRequests_5( + address locker1, + address locker2, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should silently return when encoutering a request that cannot be covered anymore" + ); + + // Ensure lockers are not the zero address or contracts, and are different + vm.assume(locker1 != address(0)); + vm.assume(locker2 != address(0)); + vm.assume(locker1 != address(lToken)); + vm.assume(locker2 != address(lToken)); + vm.assume(locker1 != address(tested)); + vm.assume(locker2 != address(tested)); + vm.assume(locker1 != locker2); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) / 2 + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to lockers + deal(address(underlyingToken), locker1, lockAmount, true); + deal(address(underlyingToken), locker2, lockAmount, true); + + // Lock amount from locker1 + vm.startPrank(locker1); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Lock amount from locker2 + vm.startPrank(locker2); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); + vm.warp(lockEndTimestamp + 1); + + // Request to unlock locked amount from locker 1 + deal(locker1, 0.003 ether); + vm.prank(locker1); + tested.requestUnlock{ value: 0.003 ether }(); + + // Request to unlock locked amount from locker 2 + deal(locker2, 0.003 ether); + vm.prank(locker2); + tested.requestUnlock{ value: 0.003 ether }(); + + // Process L-Tokens big requests from fund wallet + vm.startPrank(fundWallet); + lToken.underlying().approve(address(lToken), lockAmount); + lToken.processBigQueuedRequest(0); // Only repatriate funds for the locker1 request + vm.stopPrank(); + // Process queued requests + tested.processUnlockRequests(); + + // Assert that only one request has been processed + assertEq(tested.unlockRequestsCursor(), 1); + + // Assert that locker2 remains in the queue + assertEq(tested.unlockRequests(1), locker2); + } + + function testFuzz_processUnlockRequests_6( + address locker1, + address locker2, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should delete processed requests from queue"); + + // Ensure lockers are not the zero address or contracts, and are different + vm.assume(locker1 != address(0)); + vm.assume(locker2 != address(0)); + vm.assume(locker1 != address(lToken)); + vm.assume(locker2 != address(lToken)); + vm.assume(locker1 != address(tested)); + vm.assume(locker2 != address(tested)); + vm.assume(locker1 != locker2); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) / 2 + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to lockers + deal(address(underlyingToken), locker1, lockAmount, true); + deal(address(underlyingToken), locker2, lockAmount, true); + + // Lock amount from locker1 + vm.startPrank(locker1); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Lock amount from locker2 + vm.startPrank(locker2); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); + vm.warp(lockEndTimestamp + 1); + + // Request to unlock locked amount from locker 1 + deal(locker1, 0.003 ether); + vm.prank(locker1); + tested.requestUnlock{ value: 0.003 ether }(); + + // Request to unlock locked amount from locker 2 + deal(locker2, 0.003 ether); + vm.prank(locker2); + tested.requestUnlock{ value: 0.003 ether }(); + + // Assert that unlock requests are in the queue + assertEq(tested.unlockRequests(0), locker1); + assertEq(tested.unlockRequests(1), locker2); + + // Process L-Tokens big requests from fund wallet + vm.startPrank(fundWallet); + lToken.underlying().approve(address(lToken), lockAmount * 2); + lToken.processBigQueuedRequest(0); + lToken.processBigQueuedRequest(1); + vm.stopPrank(); + + // Process queued requests + tested.processUnlockRequests(); + + // Assert that requests have been deleted from queue + assertEq(tested.unlockRequests(0), address(0)); + assertEq(tested.unlockRequests(1), address(0)); + } + + function testFuzz_processUnlockRequests_7( + address locker1, + address locker2, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should transfer underlying tokens to lockers"); + + // Ensure lockers are not the zero address or contracts, and are different + vm.assume(locker1 != address(0)); + vm.assume(locker2 != address(0)); + vm.assume(locker1 != address(lToken)); + vm.assume(locker2 != address(lToken)); + vm.assume(locker1 != address(tested)); + vm.assume(locker2 != address(tested)); + vm.assume(locker1 != locker2); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) / 2 + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to lockers + deal(address(underlyingToken), locker1, lockAmount, true); + deal(address(underlyingToken), locker2, lockAmount, true); + + // Lock amount from locker1 + vm.startPrank(locker1); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Lock amount from locker2 + vm.startPrank(locker2); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); + vm.warp(lockEndTimestamp + 1); + + // Request to unlock locked amount from locker 1 + deal(locker1, 0.003 ether); + vm.prank(locker1); + tested.requestUnlock{ value: 0.003 ether }(); + + // Request to unlock locked amount from locker 2 + deal(locker2, 0.003 ether); + vm.prank(locker2); + tested.requestUnlock{ value: 0.003 ether }(); + + // Process L-Tokens big requests from fund wallet + vm.startPrank(fundWallet); + lToken.underlying().approve(address(lToken), lockAmount * 2); + lToken.processBigQueuedRequest(0); + lToken.processBigQueuedRequest(1); + vm.stopPrank(); + + // Assert lockers balances are 0 + assertEq(underlyingToken.balanceOf(locker1), 0); + assertEq(underlyingToken.balanceOf(locker2), 0); + + // Assert PreMining contract balance is twice the lockAmount + assertEq( + underlyingToken.balanceOf(address(tested)), + lockAmount * 2 + ); + + // Process queued requests + tested.processUnlockRequests(); + + // Assert lockers balances have increased by lockAmount + assertEq(underlyingToken.balanceOf(locker1), lockAmount); + assertEq(underlyingToken.balanceOf(locker2), lockAmount); + + // Assert PreMining contract balance is now 0 + assertEq(underlyingToken.balanceOf(address(tested)), 0); + } + + function test_processUnlockRequests_8( + address locker1, + address locker2, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should properly increase queue cursor to next request to be processed" + ); + + // Ensure lockers are not the zero address or contracts, and are different + vm.assume(locker1 != address(0)); + vm.assume(locker2 != address(0)); + vm.assume(locker1 != address(lToken)); + vm.assume(locker2 != address(lToken)); + vm.assume(locker1 != address(tested)); + vm.assume(locker2 != address(tested)); + vm.assume(locker1 != locker2); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) / 2 + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to lockers + deal(address(underlyingToken), locker1, lockAmount, true); + deal(address(underlyingToken), locker2, lockAmount, true); + + // Lock amount from locker1 + vm.startPrank(locker1); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // Lock amount from locker2 + vm.startPrank(locker2); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks(locker1); + vm.warp(lockEndTimestamp + 1); + + // Request to unlock locked amount from locker 1 + deal(locker1, 0.003 ether); + vm.prank(locker1); + tested.requestUnlock{ value: 0.003 ether }(); + + // Request to unlock locked amount from locker 2 + deal(locker2, 0.003 ether); + vm.prank(locker2); + tested.requestUnlock{ value: 0.003 ether }(); + + // Process L-Tokens big requests from fund wallet + vm.startPrank(fundWallet); + lToken.underlying().approve(address(lToken), lockAmount * 2); + lToken.processBigQueuedRequest(0); + lToken.processBigQueuedRequest(1); + vm.stopPrank(); + + // Assert unlock queue cursor is currently 0 + assertEq(tested.unlockRequestsCursor(), 0); + + // Process queued requests + tested.processUnlockRequests(); + + // Assert unlock queue cursor is now 2 + assertEq(tested.unlockRequestsCursor(), 2); + } + + function test_processUnlockRequests_9( + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log( + "Should never revert from out of gas and properly end instead" + ); + + // Store the requests number + uint256 requestsNumber = 100; + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) / requestsNumber + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Create 2000 locks + for (uint160 i = 1; i < requestsNumber; i++) { + // Build locker address + address locker = address(i); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount from locker + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + } + + // End Deposit phase + tested.endDepositPhase(); + + // Ensure lock end is in the past + (, , , , uint40 lockEndTimestamp) = tested.accountsLocks( + address(1) + ); + vm.warp(lockEndTimestamp + 1); + + // Create 2000 unlock requests + for (uint160 i = 1; i < requestsNumber; i++) { + // Build locker address + address locker = address(i); + + // Request to unlock locked amount from locker + deal(locker, 0.003 ether); + vm.prank(locker); + tested.requestUnlock{ value: 0.003 ether }(); + } + + // Mint enough underlying tokens to PreMining contract to cover all requests + deal( + address(underlyingToken), + address(tested), + lockAmount * requestsNumber, + true + ); + + // Process queued requests + // It should revert from OOG if not prevent by the function + tested.processUnlockRequests{ gas: 1000000 }(); + } + + // =================================== + // === availableToClaim() function === + function test_availableToClaim_1( + address locker, + uint240 lockAmount, + uint8 lockDuration, + uint32 elapsedTime + ) public { + console.log( + "Should properly apply elasped time since Claim phase start" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Bound elapsed time to vesting duration + uint256 secondsInOneMonth = 30 * 24 * 60 * 60; + elapsedTime = uint32( + bound( + elapsedTime, + 0, + tested.vestingDuration() * secondsInOneMonth + ) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase and start Claim one + tested.endDepositPhase(); + tested.setLDYToken(address(ldyToken)); + tested.startClaimPhase(); + + // Move forward a random elapsed amount in vesting time + skip(elapsedTime); + + // Compute available LDY rewards to claim + uint256 availableRewards = tested.availableToClaim(locker); + + if (tested.eligibleRewardsOf(locker) > 0) { + // Compute applied elapsed time from available rewards, vestingDuration and eligible rewards of + uint256 vestingInSeconds = uint256(tested.vestingDuration()) * + secondsInOneMonth; + uint256 appliedElapsedTime = (availableRewards * + vestingInSeconds) / tested.eligibleRewardsOf(locker); + + // Compute difference between applied and expected elapsed time + uint256 elapsedTimeDiff = appliedElapsedTime > elapsedTime + ? appliedElapsedTime - elapsedTime + : elapsedTime - appliedElapsedTime; + + // Assert that difference is less than 1 hour + assertLe(elapsedTimeDiff, 60 * 60); + + // Assert the in despite of imprecision, applied time is never greater than expected + assertLe(appliedElapsedTime, elapsedTime); + } + } + + function test_availableToClaim_2( + address locker, + uint240 lockAmount, + uint8 lockDuration, + uint32 elapsedTime + ) public { + console.log( + "Should properly apply total eligible rewards of locker" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Bound elapsed time to vesting duration + uint256 secondsInOneMonth = 30 * 24 * 60 * 60; + elapsedTime = uint32( + bound( + elapsedTime, + 0, + tested.vestingDuration() * secondsInOneMonth + ) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase and start Claim one + tested.endDepositPhase(); + tested.setLDYToken(address(ldyToken)); + tested.startClaimPhase(); + + // Move forward a random elapsed amount in vesting time + skip(elapsedTime); + + // Compute available LDY rewards to claim + uint256 availableRewards = tested.availableToClaim(locker); + + if (elapsedTime > 0) { + // Compute applied eligible rewards of from available rewards, vestingDuration and elapsed time + uint256 vestingInSeconds = uint256(tested.vestingDuration()) * + secondsInOneMonth; + uint256 appliedEligibleRewards = (availableRewards * + vestingInSeconds) / elapsedTime; + + // Compute difference between applied and expected elapsed time + uint256 eligibleRewardsDiff = appliedEligibleRewards > + tested.eligibleRewardsOf(locker) + ? appliedEligibleRewards - tested.eligibleRewardsOf(locker) + : tested.eligibleRewardsOf(locker) - appliedEligibleRewards; + + // Assert that difference is less 1 LDY + assertLe(eligibleRewardsDiff, 1 * 10 ** 18); + + // Assert the in despite of imprecision, applied time is never greater than expected + assertLe( + appliedEligibleRewards, + tested.eligibleRewardsOf(locker) + ); + } + } + + function test_availableToClaim_3( + address locker, + uint240 lockAmount, + uint8 lockDuration, + uint32 elapsedTime + ) public { + console.log("Should properly apply vesting duration"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Bind elapsed time to vesting duration + uint256 secondsInOneMonth = 30 * 24 * 60 * 60; + elapsedTime = uint32( + bound( + elapsedTime, + 0, + tested.vestingDuration() * secondsInOneMonth + ) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase and start Claim one + tested.endDepositPhase(); + tested.setLDYToken(address(ldyToken)); + tested.startClaimPhase(); + + // Move forward a random elapsed amount in vesting time + skip(elapsedTime); + + // Compute available LDY rewards to claim + uint256 availableRewards = tested.availableToClaim(locker); + + if (availableRewards > 0) { + // Compute vesting duration from available rewards, eligible rewards of and elapsed time + uint256 appliedVestingSeconds = (elapsedTime * + tested.eligibleRewardsOf(locker)) / availableRewards; + uint256 appliedVestingDuration = appliedVestingSeconds / + secondsInOneMonth; + + // Compute difference between applied and expected vesting duration + uint256 vestingDurationDiff = appliedVestingDuration > + tested.vestingDuration() + ? appliedVestingDuration - tested.vestingDuration() + : tested.vestingDuration() - appliedVestingDuration; + + // Assert that difference is less 1 month + assertLe(vestingDurationDiff, 1); + + // Assert the in despite of imprecision, applied vesting duration is never lower than expected + assertGe(appliedVestingDuration, tested.vestingDuration()); + } + } + + function test_availableToClaim_4( + address locker, + uint240 lockAmount, + uint8 lockDuration + ) public { + console.log("Should properly consider already claimed rewards"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase and start Claim one + tested.endDepositPhase(); + tested.setLDYToken(address(ldyToken)); + tested.startClaimPhase(); + + // Feed lockdrop contract with LDY rewards + deal(address(ldyToken), address(tested), type(uint256).max); + + // Move forward half of vesting duration + uint256 secondsInOneMonth = 30 * 24 * 60 * 60; + skip((tested.vestingDuration() * secondsInOneMonth) / 2); + + // Perform a first rewards claim + vm.prank(locker); + tested.claimRewards(); + + // Move forward the remaining half of vesting duration + skip((tested.vestingDuration() * secondsInOneMonth) / 2); + + // Claim rewards again + vm.prank(locker); + tested.claimRewards(); + + // Assert that available rewards to claim is 0 + assertEq(tested.availableToClaim(locker), 0); + + // Assert that locker has received 100% of its eligible rewards + assertEq( + ldyToken.balanceOf(locker), + tested.eligibleRewardsOf(locker) + ); + } + + // =============================== + // === claimRewards() function === + function test_claimRewards_1() public { + console.log("Should revert if contract is paused"); + tested.pause(); + expectRevertPaused(); + tested.claimRewards(); + } + + function test_claimRewards_2() public { + console.log("Should revert if Claim phase has not started yet"); + + // Expect revert + vm.expectRevert(bytes("L87")); + tested.claimRewards(); + } + + function testFuzz_claimRewards_3( + address locker, + uint240 lockAmount, + uint8 lockDuration, + uint32 elapsedTime + ) public { + console.log( + "Should increase account's claimed rewards by the claimed amount" + ); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Bind elapsed time to vesting duration + uint256 secondsInOneMonth = 30 * 24 * 60 * 60; + elapsedTime = uint32( + bound( + elapsedTime, + 0, + tested.vestingDuration() * secondsInOneMonth + ) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase and start Claim one + tested.endDepositPhase(); + tested.setLDYToken(address(ldyToken)); + tested.startClaimPhase(); + + // Feed lockdrop contract with LDY rewards + deal(address(ldyToken), address(tested), type(uint256).max); + + // Move forward a random elapsed amount in vesting time + skip(elapsedTime); + + // Assert that current claimed amount of locker is 0 + (, , , uint216 claimedRewardsBefore, ) = tested.accountsLocks( + locker + ); + assertEq(claimedRewardsBefore, 0); + + // Store available to claim amount for later usage + uint256 availableToClaim = tested.availableToClaim(locker); + + // Perform a rewards claim + vm.prank(locker); + tested.claimRewards(); + + // Assert that claimed amount of locker has increased by available to claim amount + (, , , uint216 claimedRewardsAfter, ) = tested.accountsLocks( + locker + ); + assertEq(claimedRewardsAfter, availableToClaim); + + // Assert that available to claim amount is now 0 + assertEq(tested.availableToClaim(locker), 0); + } + + function testFuzz_claimRewards_4( + address locker, + uint240 lockAmount, + uint8 lockDuration, + uint32 elapsedTime + ) public { + console.log("Should transfer claimed rewards to locker"); + + // Ensure locker is not the zero address + vm.assume(locker != address(0)); + + // Ensure lockAmount is at least equal to 1 + lockAmount = uint240( + bound( + lockAmount, + 1 * 10 ** lToken.decimals(), + uint256(LOCKED_HARD_CAP) + ) + ); + + // Ensure lock duration is at least equal to 1 + lockDuration = uint8(bound(lockDuration, 1, MAX_LOCK_DURATION)); + + // Bind elapsed time to vesting duration + uint256 secondsInOneMonth = 30 * 24 * 60 * 60; + elapsedTime = uint32( + bound( + elapsedTime, + 0, + tested.vestingDuration() * secondsInOneMonth + ) + ); + + // Mint underlying tokens to locker + deal(address(underlyingToken), locker, lockAmount, true); + + // Lock amount + vm.startPrank(locker); + underlyingToken.approve(address(tested), lockAmount); + tested.lock(lockAmount, lockDuration); + vm.stopPrank(); + + // End Deposit phase and start Claim one + tested.endDepositPhase(); + tested.setLDYToken(address(ldyToken)); + tested.startClaimPhase(); + + // Feed lockdrop contract with LDY rewards + deal(address(ldyToken), address(tested), type(uint256).max); + + // Move forward a random elapsed amount in vesting time + skip(elapsedTime); + + // Assert that current locker LDY balance is 0 + assertEq(ldyToken.balanceOf(locker), 0); + + // Store available to claim amount for later usage + uint256 availableToClaim = tested.availableToClaim(locker); + + // Perform a rewards claim + vm.prank(locker); + tested.claimRewards(); + + // Assert that locker LDY balance has increased by available to claim amount + assertEq(ldyToken.balanceOf(locker), availableToClaim); + + // Assert that available to claim amount is now 0 + assertEq(tested.availableToClaim(locker), 0); + } } diff --git a/contracts/foundry/test/_helpers/ModifiersExpectations.sol b/contracts/foundry/test/_helpers/ModifiersExpectations.sol index 2b83bd37..d8a931a0 100644 --- a/contracts/foundry/test/_helpers/ModifiersExpectations.sol +++ b/contracts/foundry/test/_helpers/ModifiersExpectations.sol @@ -4,19 +4,19 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; contract ModifiersExpectations is Test { - function expectRevertOnlyOwner() public { - vm.expectRevert(bytes("Ownable: caller is not the owner")); - } + function expectRevertOnlyOwner() public { + vm.expectRevert(bytes("Ownable: caller is not the owner")); + } - function expectRevertPaused() public { - vm.expectRevert(bytes("Pausable: paused")); - } + function expectRevertPaused() public { + vm.expectRevert(bytes("Pausable: paused")); + } - function expectRevertRestricted() public { - vm.expectRevert(bytes("L9")); - } + function expectRevertRestricted() public { + vm.expectRevert(bytes("L9")); + } - // Trick to exclude this contract from coverage report - // See: https://github.com/foundry-rs/foundry/issues/2988#issuecomment-1437784542 - function test() public {} + // Trick to exclude this contract from coverage report + // See: https://github.com/foundry-rs/foundry/issues/2988#issuecomment-1437784542 + function test() public {} } diff --git a/contracts/foundry/test/abstracts/GlobalOwnableUpgradeable.t.sol b/contracts/foundry/test/abstracts/GlobalOwnableUpgradeable.t.sol index 983e308b..e3cbcb16 100644 --- a/contracts/foundry/test/abstracts/GlobalOwnableUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/GlobalOwnableUpgradeable.t.sol @@ -2,98 +2,104 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../_helpers/ModifiersExpectations.sol"; - -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalOwnableUpgradeable} from "../../../src/abstracts/GlobalOwnableUpgradeable.sol"; -import {GlobalOwner} from "../../../src/GlobalOwner.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -contract TestedContract is Initializable, UUPSUpgradeable, GlobalOwnableUpgradeable { - constructor() { - _disableInitializers(); - } - - function initialize(address globalOwner_) public initializer { - __UUPSUpgradeable_init(); - __GlobalOwnable_init(globalOwner_); - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} - - function restrictedFunction() public view onlyOwner returns (bool) { - return true; - } +import { ModifiersExpectations } from "../_helpers/ModifiersExpectations.sol"; + +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalOwnableUpgradeable } from "../../../src/abstracts/GlobalOwnableUpgradeable.sol"; +import { GlobalOwner } from "../../../src/GlobalOwner.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract TestedContract is + Initializable, + UUPSUpgradeable, + GlobalOwnableUpgradeable +{ + constructor() { + _disableInitializers(); + } + + function initialize(address globalOwner_) public initializer { + __UUPSUpgradeable_init(); + __GlobalOwnable_init(globalOwner_); + } + + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} + + function restrictedFunction() public view onlyOwner returns (bool) { + return true; + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy tested contract - TestedContract impl2 = new TestedContract(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - tested = TestedContract(address(proxy2)); - tested.initialize(address(globalOwner)); - vm.label(address(tested), "TestedContract"); - } - - // ============================== - // === globalOwner() function === - function test_globalOwner_1() public { - console.log("Should return address given during initialization"); - assertEq(tested.globalOwner(), address(globalOwner)); - } - - // ============================== - // === owner() function === - function test_owner_1() public { - console.log("Should mirror globalOwner.owner()"); - assertEq(tested.owner(), globalOwner.owner()); - - // Transfer the ownsership to ensure that tested.owner() indeed mirrors globalOwner.owner() - globalOwner.transferOwnership(address(1234)); - vm.prank(address(1234)); - globalOwner.acceptOwnership(); - assertEq(tested.owner(), address(1234)); - } - - // ========================== - // === onlyOwner modifier === - function test_onlyOwner_1() public { - console.log("Should allow calls from owner"); - assertEq(tested.restrictedFunction(), true); - } - - function test_onlyOwner_2() public { - console.log("Should revert calls from non-owner account"); - expectRevertOnlyOwner(); - vm.prank(address(0)); - tested.restrictedFunction(); - } - - // =========================== - // === transferOwnership() === - function testFuzz_transferOwnership_1(address newOwner) public { - console.log("Should revert in any case"); - vm.expectRevert(bytes("L8")); - tested.transferOwnership(newOwner); - } - - // =========================== - // === renounceOwnership() === - function test_renounceOwnership_1() public { - console.log("Should revert"); - vm.expectRevert(bytes("L65")); - tested.renounceOwnership(); - } + TestedContract tested; + GlobalOwner globalOwner; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy tested contract + TestedContract impl2 = new TestedContract(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + tested = TestedContract(address(proxy2)); + tested.initialize(address(globalOwner)); + vm.label(address(tested), "TestedContract"); + } + + // ============================== + // === globalOwner() function === + function test_globalOwner_1() public { + console.log("Should return address given during initialization"); + assertEq(tested.globalOwner(), address(globalOwner)); + } + + // ============================== + // === owner() function === + function test_owner_1() public { + console.log("Should mirror globalOwner.owner()"); + assertEq(tested.owner(), globalOwner.owner()); + + // Transfer the ownsership to ensure that tested.owner() indeed mirrors globalOwner.owner() + globalOwner.transferOwnership(address(1234)); + vm.prank(address(1234)); + globalOwner.acceptOwnership(); + assertEq(tested.owner(), address(1234)); + } + + // ========================== + // === onlyOwner modifier === + function test_onlyOwner_1() public { + console.log("Should allow calls from owner"); + assertEq(tested.restrictedFunction(), true); + } + + function test_onlyOwner_2() public { + console.log("Should revert calls from non-owner account"); + expectRevertOnlyOwner(); + vm.prank(address(0)); + tested.restrictedFunction(); + } + + // =========================== + // === transferOwnership() === + function testFuzz_transferOwnership_1(address newOwner) public { + console.log("Should revert in any case"); + vm.expectRevert(bytes("L8")); + tested.transferOwnership(newOwner); + } + + // =========================== + // === renounceOwnership() === + function test_renounceOwnership_1() public { + console.log("Should revert"); + vm.expectRevert(bytes("L65")); + tested.renounceOwnership(); + } } diff --git a/contracts/foundry/test/abstracts/GlobalPausableUpgradeable.t.sol b/contracts/foundry/test/abstracts/GlobalPausableUpgradeable.t.sol index e465b996..b88639f3 100644 --- a/contracts/foundry/test/abstracts/GlobalPausableUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/GlobalPausableUpgradeable.t.sol @@ -2,90 +2,101 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "../_helpers/ModifiersExpectations.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalPausableUpgradeable} from "../../../src/abstracts/GlobalPausableUpgradeable.sol"; -import {GlobalOwner} from "../../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../../src/GlobalPause.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalPausableUpgradeable } from "../../../src/abstracts/GlobalPausableUpgradeable.sol"; +import { GlobalOwner } from "../../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../../src/GlobalPause.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -contract TestedContract is Initializable, UUPSUpgradeable, GlobalPausableUpgradeable { - constructor() { - _disableInitializers(); - } +contract TestedContract is + Initializable, + UUPSUpgradeable, + GlobalPausableUpgradeable +{ + constructor() { + _disableInitializers(); + } - function initialize(address globalPause_) public initializer { - __UUPSUpgradeable_init(); - __GlobalPausable_init(globalPause_); - } + function initialize(address globalPause_) public initializer { + __UUPSUpgradeable_init(); + __GlobalPausable_init(globalPause_); + } - function _authorizeUpgrade(address newImplementation) internal override {} + function _authorizeUpgrade( + address newImplementation + ) internal override {} - function restrictedFunction() public view whenNotPaused returns (bool) { - return true; - } + function restrictedFunction() + public + view + whenNotPaused + returns (bool) + { + return true; + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GlobalPause globalPause; + TestedContract tested; + GlobalOwner globalOwner; + GlobalPause globalPause; - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); - // Deploy GlobalPause - GlobalPause impl3 = new GlobalPause(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalPause = GlobalPause(address(proxy3)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); + // Deploy GlobalPause + GlobalPause impl3 = new GlobalPause(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalPause = GlobalPause(address(proxy3)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); - // Deploy tested contract - TestedContract impl2 = new TestedContract(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - tested = TestedContract(address(proxy2)); - tested.initialize(address(globalPause)); - vm.label(address(tested), "TestedContract"); - } + // Deploy tested contract + TestedContract impl2 = new TestedContract(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + tested = TestedContract(address(proxy2)); + tested.initialize(address(globalPause)); + vm.label(address(tested), "TestedContract"); + } - // ================================== - // === globalPause() function === - function test_globalPause_1() public { - console.log("Should return address given during initialization"); - assertEq(tested.globalPause(), address(globalPause)); - } + // ================================== + // === globalPause() function === + function test_globalPause_1() public { + console.log("Should return address given during initialization"); + assertEq(tested.globalPause(), address(globalPause)); + } - // =============================== - // === whenNotPaused modifier === - function test_whenNotPaused_1() public { - console.log("Should allow calls when globalPause is not paused"); - assertEq(tested.restrictedFunction(), true); - } + // =============================== + // === whenNotPaused modifier === + function test_whenNotPaused_1() public { + console.log("Should allow calls when globalPause is not paused"); + assertEq(tested.restrictedFunction(), true); + } - function test_whenNotPaused_2() public { - console.log("Should revert calls when globalPause is paused"); - globalPause.pause(); - expectRevertPaused(); - tested.restrictedFunction(); - } + function test_whenNotPaused_2() public { + console.log("Should revert calls when globalPause is paused"); + globalPause.pause(); + expectRevertPaused(); + tested.restrictedFunction(); + } - // =============================== - // === paused() function === - function test_paused_1() public { - console.log("Should mirror globalPause.paused()"); - assertEq(tested.paused(), globalPause.paused()); + // =============================== + // === paused() function === + function test_paused_1() public { + console.log("Should mirror globalPause.paused()"); + assertEq(tested.paused(), globalPause.paused()); - // Pause globalPause to ensure that tested.paused() indeed mirrors globalPause.paused() - assertEq(tested.paused(), false); - globalPause.pause(); - assertEq(tested.paused(), true); - } + // Pause globalPause to ensure that tested.paused() indeed mirrors globalPause.paused() + assertEq(tested.paused(), false); + globalPause.pause(); + assertEq(tested.paused(), true); + } } diff --git a/contracts/foundry/test/abstracts/GlobalRestrictableUpgradeable.t.sol b/contracts/foundry/test/abstracts/GlobalRestrictableUpgradeable.t.sol index 4ac426fc..edc9ec84 100644 --- a/contracts/foundry/test/abstracts/GlobalRestrictableUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/GlobalRestrictableUpgradeable.t.sol @@ -2,98 +2,111 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../_helpers/ModifiersExpectations.sol"; - -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalRestrictableUpgradeable} from "../../../src/abstracts/GlobalRestrictableUpgradeable.sol"; -import {GlobalOwner} from "../../../src/GlobalOwner.sol"; -import {GlobalBlacklist} from "../../../src/GlobalBlacklist.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -contract TestedContract is Initializable, UUPSUpgradeable, GlobalRestrictableUpgradeable { - constructor() { - _disableInitializers(); - } - - function initialize(address globalBlacklist_) public initializer { - __UUPSUpgradeable_init(); - __GlobalRestrictable_init(globalBlacklist_); - } - - function _authorizeUpgrade(address newImplementation) internal override {} - - function restrictedFunction() public view notBlacklisted(msg.sender) returns (bool) { - return true; - } - - function public_isBlacklisted(address account) public view returns (bool) { - return isBlacklisted(account); - } +import { ModifiersExpectations } from "../_helpers/ModifiersExpectations.sol"; + +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalRestrictableUpgradeable } from "../../../src/abstracts/GlobalRestrictableUpgradeable.sol"; +import { GlobalOwner } from "../../../src/GlobalOwner.sol"; +import { GlobalBlacklist } from "../../../src/GlobalBlacklist.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract TestedContract is + Initializable, + UUPSUpgradeable, + GlobalRestrictableUpgradeable +{ + constructor() { + _disableInitializers(); + } + + function initialize(address globalBlacklist_) public initializer { + __UUPSUpgradeable_init(); + __GlobalRestrictable_init(globalBlacklist_); + } + + function _authorizeUpgrade( + address newImplementation + ) internal override {} + + function restrictedFunction() + public + view + notBlacklisted(msg.sender) + returns (bool) + { + return true; + } + + function public_isBlacklisted( + address account + ) public view returns (bool) { + return isBlacklisted(account); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GlobalBlacklist globalBlacklist; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - // Deploy tested contract - TestedContract impl2 = new TestedContract(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - tested = TestedContract(address(proxy2)); - tested.initialize(address(globalBlacklist)); - vm.label(address(tested), "TestedContract"); - } - - // ================================== - // === globalBlacklist() function === - function test_globalBlacklist_1() public { - console.log("Should return address given during initialization"); - assertEq(tested.globalBlacklist(), address(globalBlacklist)); - } - - // =============================== - // === notBlacklisted modifier === - function test_notBlacklisted_1() public { - console.log("Should allow calls from non-blacklisted account"); - assertEq(tested.restrictedFunction(), true); - } - - function test_notBlacklisted_2() public { - console.log("Should revert calls from blacklisted account"); - globalBlacklist.blacklist(address(1234)); - vm.prank(address(1234)); - expectRevertRestricted(); - tested.restrictedFunction(); - } - - // =============================== - // === isBlacklisted() function === - function test_isBlacklisted_1() public { - console.log("Should mirror globalBlacklist.isBlacklisted()"); - assertEq( - tested.public_isBlacklisted(address(1)), - globalBlacklist.isBlacklisted(address(1)) - ); - - // Blacklist address(1) to ensure that tested.isBlacklisted() indeed mirrors globalBlacklist.isBlacklisted() - assertEq(tested.public_isBlacklisted(address(1)), false); - globalBlacklist.blacklist(address(1)); - assertEq(tested.public_isBlacklisted(address(1)), true); - } + TestedContract tested; + GlobalOwner globalOwner; + GlobalBlacklist globalBlacklist; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + // Deploy tested contract + TestedContract impl2 = new TestedContract(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + tested = TestedContract(address(proxy2)); + tested.initialize(address(globalBlacklist)); + vm.label(address(tested), "TestedContract"); + } + + // ================================== + // === globalBlacklist() function === + function test_globalBlacklist_1() public { + console.log("Should return address given during initialization"); + assertEq(tested.globalBlacklist(), address(globalBlacklist)); + } + + // =============================== + // === notBlacklisted modifier === + function test_notBlacklisted_1() public { + console.log("Should allow calls from non-blacklisted account"); + assertEq(tested.restrictedFunction(), true); + } + + function test_notBlacklisted_2() public { + console.log("Should revert calls from blacklisted account"); + globalBlacklist.blacklist(address(1234)); + vm.prank(address(1234)); + expectRevertRestricted(); + tested.restrictedFunction(); + } + + // =============================== + // === isBlacklisted() function === + function test_isBlacklisted_1() public { + console.log("Should mirror globalBlacklist.isBlacklisted()"); + assertEq( + tested.public_isBlacklisted(address(1)), + globalBlacklist.isBlacklisted(address(1)) + ); + + // Blacklist address(1) to ensure that tested.isBlacklisted() indeed mirrors globalBlacklist.isBlacklisted() + assertEq(tested.public_isBlacklisted(address(1)), false); + globalBlacklist.blacklist(address(1)); + assertEq(tested.public_isBlacklisted(address(1)), true); + } } diff --git a/contracts/foundry/test/abstracts/InvestUpgradeable.t.sol b/contracts/foundry/test/abstracts/InvestUpgradeable.t.sol index 70aec5fc..c79c4502 100644 --- a/contracts/foundry/test/abstracts/InvestUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/InvestUpgradeable.t.sol @@ -2,1945 +2,2344 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "../_helpers/ModifiersExpectations.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {InvestUpgradeable} from "../../../src/abstracts/InvestUpgradeable.sol"; -import {GlobalOwner} from "../../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../../src/GlobalPause.sol"; -import {GlobalBlacklist} from "../../../src/GlobalBlacklist.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import {GenericERC20} from "../../../src/GenericERC20.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { InvestUpgradeable } from "../../../src/abstracts/InvestUpgradeable.sol"; +import { GlobalOwner } from "../../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../../src/GlobalPause.sol"; +import { GlobalBlacklist } from "../../../src/GlobalBlacklist.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { GenericERC20 } from "../../../src/GenericERC20.sol"; -import {SUD} from "../../../src/libs/SUD.sol"; -import {APRHistory as APRH} from "../../../src/libs/APRHistory.sol"; +import { SUD } from "../../../src/libs/SUD.sol"; +import { APRHistory as APRH } from "../../../src/libs/APRHistory.sol"; contract TestedContract is InvestUpgradeable { - mapping(address => uint256) public stakeOf; - - constructor() { - _disableInitializers(); - } - - function initialize( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - address invested_ - ) public initializer { - __Invest_init(globalOwner_, globalPause_, globalBlacklist_, invested_); - } - - /** - * @dev Create simple stake and unstake functions to simulate investment. - * Note that those functions doesn't even transfer invested token as - * not necessary for the tests as no InvestUpgradeable function rely - * on invested().balanceOf() - */ - function stake(uint256 amount) public { - _beforeInvestmentChange(msg.sender, false); - stakeOf[msg.sender] += amount; - } - - function unstake(uint256 amount) public { - _beforeInvestmentChange(msg.sender, false); - stakeOf[msg.sender] -= amount; - } - - function _investmentOf(address account) internal view override returns (uint256) { - return stakeOf[account]; - } - - /** - * @dev Implementation of _distributeRewards() function that can be controlled by boolean - * variables to simulate different scenarios. - */ - uint256 public _distributeRewards_CallsCount; - bool _distributeRewards_Implemented; - bool _distributeRewards_ResetInvestmentPeriod; - bool _distributeRewards_Autocompound; - - function set_distributeRewards_Implemented(bool value) public { - _distributeRewards_Implemented = value; - } - - function set_distributeRewards_ResetInvestmentPeriod(bool value) public { - _distributeRewards_ResetInvestmentPeriod = value; - } - - function set_distributeRewards_Autocompound(bool value) public { - _distributeRewards_Autocompound = value; - } - - function _distributeRewards(address account, uint256 amount) internal override returns (bool) { - // Return false when not implemented - if (!_distributeRewards_Implemented) return false; - - // Keep track of implemented calls count - _distributeRewards_CallsCount++; - - // Reset investment period if requested - if (_distributeRewards_ResetInvestmentPeriod) { - _beforeInvestmentChange(account, _distributeRewards_Autocompound); - } - - // In this implementation claiming == re-investing / compounding - stakeOf[account] += amount; - - // Return true to simulate success - return true; - } - - function public_distributeRewards(address account, uint256 amount) public returns (bool) { - return InvestUpgradeable._distributeRewards(account, amount); - } - - function public_calculatePeriodRewards( - uint40 beginTimestamp, - uint40 endTimestamp, - uint16 aprUD7x3, - uint256 investedAmount - ) public view returns (uint256 rewards) { - return _calculatePeriodRewards(beginTimestamp, endTimestamp, aprUD7x3, investedAmount); - } - - function public_deepInvestmentOf( - address account - ) public view returns (uint256 deepInvestedAmount) { - return _deepInvestmentOf(account); - } - - function public_rewardsOf( - address account, - bool autocompound - ) public view returns (uint256 rewards) { - return _rewardsOf(account, autocompound); - } - - function public_beforeInvestmentChange(address account, bool autocompound) public { - _beforeInvestmentChange(account, autocompound); - } - - function public_deepResetInvestmentPeriodOf(address account) public { - _deepResetInvestmentPeriodOf(account); - } - - function public_accountsInfos(address account) public view returns (AccountDetails memory) { - return accountsDetails[account]; - } + mapping(address => uint256) public stakeOf; + + constructor() { + _disableInitializers(); + } + + function initialize( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + address invested_ + ) public initializer { + __Invest_init( + globalOwner_, + globalPause_, + globalBlacklist_, + invested_ + ); + } + + /** + * @dev Create simple stake and unstake functions to simulate investment. + * Note that those functions doesn't even transfer invested token as + * not necessary for the tests as no InvestUpgradeable function rely + * on invested().balanceOf() + */ + function stake(uint256 amount) public { + _beforeInvestmentChange(msg.sender, false); + stakeOf[msg.sender] += amount; + } + + function unstake(uint256 amount) public { + _beforeInvestmentChange(msg.sender, false); + stakeOf[msg.sender] -= amount; + } + + function _investmentOf( + address account + ) internal view override returns (uint256) { + return stakeOf[account]; + } + + /** + * @dev Implementation of _distributeRewards() function that can be controlled by boolean + * variables to simulate different scenarios. + */ + uint256 public _distributeRewards_CallsCount; + bool _distributeRewards_Implemented; + bool _distributeRewards_ResetInvestmentPeriod; + bool _distributeRewards_Autocompound; + + function set_distributeRewards_Implemented(bool value) public { + _distributeRewards_Implemented = value; + } + + function set_distributeRewards_ResetInvestmentPeriod( + bool value + ) public { + _distributeRewards_ResetInvestmentPeriod = value; + } + + function set_distributeRewards_Autocompound(bool value) public { + _distributeRewards_Autocompound = value; + } + + function _distributeRewards( + address account, + uint256 amount + ) internal override returns (bool) { + // Return false when not implemented + if (!_distributeRewards_Implemented) return false; + + // Keep track of implemented calls count + _distributeRewards_CallsCount++; + + // Reset investment period if requested + if (_distributeRewards_ResetInvestmentPeriod) { + _beforeInvestmentChange( + account, + _distributeRewards_Autocompound + ); + } + + // In this implementation claiming == re-investing / compounding + stakeOf[account] += amount; + + // Return true to simulate success + return true; + } + + function public_distributeRewards( + address account, + uint256 amount + ) public returns (bool) { + return InvestUpgradeable._distributeRewards(account, amount); + } + + function public_calculatePeriodRewards( + uint40 beginTimestamp, + uint40 endTimestamp, + uint16 aprUD7x3, + uint256 investedAmount + ) public view returns (uint256 rewards) { + return + _calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + } + + function public_deepInvestmentOf( + address account + ) public view returns (uint256 deepInvestedAmount) { + return _deepInvestmentOf(account); + } + + function public_rewardsOf( + address account, + bool autocompound + ) public view returns (uint256 rewards) { + return _rewardsOf(account, autocompound); + } + + function public_beforeInvestmentChange( + address account, + bool autocompound + ) public { + _beforeInvestmentChange(account, autocompound); + } + + function public_deepResetInvestmentPeriodOf( + address account + ) public { + _deepResetInvestmentPeriodOf(account); + } + + function public_accountsInfos( + address account + ) public view returns (AccountDetails memory) { + return accountsDetails[account]; + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GlobalPause globalPause; - GlobalBlacklist globalBlacklist; - GenericERC20 investedToken; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - GlobalPause impl2 = new GlobalPause(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - globalPause = GlobalPause(address(proxy2)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - // Deploy GenericERC20 - investedToken = new GenericERC20("Dummy Token", "DUMMY", 6); - vm.label(address(investedToken), "Invested token"); - - // Deploy tested contract - TestedContract impl5 = new TestedContract(); - ERC1967Proxy proxy5 = new ERC1967Proxy(address(impl5), ""); - tested = TestedContract(address(proxy5)); - tested.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(investedToken) - ); - vm.label(address(tested), "TestedContract"); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - tested.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - address(investedToken) - ); - } - - function test_initialize_2() public { - console.log("Should properly set global owner, pause and blacklist"); - assertEq(tested.globalOwner(), address(globalOwner)); - assertEq(tested.globalPause(), address(globalPause)); - assertEq(tested.globalBlacklist(), address(globalBlacklist)); - } - - // ============================== - // === invested() function === - function test_invested_1() public { - console.log("Should return address given during initialization"); - assertEq(address(tested.invested()), address(investedToken)); - } - - // ========================= - // === setAPR() function === - function testFuzz_setAPR_1(uint16 newAPRUD7x3) public { - console.log("Should update the APR return by getAPR()"); - - tested.setAPR(newAPRUD7x3); - assertEq(tested.getAPR(), newAPRUD7x3); - } - - // ======================================= - // === startRewardsRedirection() function === - function testFuzz_startRewardsRedirection_1(address from, address to) public { - console.log("Should revert if contract is paused "); - globalPause.pause(); - expectRevertPaused(); - tested.startRewardsRedirection(from, to); - } - - function testFuzz_startRewardsRedirection_2(address from, address to) public { - console.log("Should revert if from account is blacklisted"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Blacklist account - globalBlacklist.blacklist(from); - - // Expect revert - expectRevertRestricted(); - tested.startRewardsRedirection(from, to); - } - - function testFuzz_startRewardsRedirection_3(address from, address to) public { - console.log("Should revert if to account is blacklisted"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Blacklist account - globalBlacklist.blacklist(to); - - // Expect revert - expectRevertRestricted(); - tested.startRewardsRedirection(from, to); - } - - function testFuzz_startRewardsRedirection_4( - uint16 aprUD7x3, - address from, - address to1, - address to2 - ) public { - console.log("Should revert if trying to redirect while a redirection is already active"); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure addresses are different and and not the zero address - vm.assume(to1 != address(0)); - vm.assume(to2 != address(0)); - vm.assume(from != address(0)); - vm.assume(to1 != to2); - vm.assume(from != to1); - vm.assume(from != to2); - - // First redirection - tested.startRewardsRedirection(from, to1); - - // Expect revert on a second redirection - vm.expectRevert(bytes("L62")); - tested.startRewardsRedirection(from, to2); - - // Now stop the first redirection - tested.stopRewardsRedirection(from, to1); - - // Second redirection should now work - tested.startRewardsRedirection(from, to2); - } - - function testFuzz_startRewardsRedirection_5(address to) public { - console.log("Should revert if from account is zero address"); - - // Ensure to is not the zero address - vm.assume(to != address(0)); - - // Expect revert - vm.expectRevert(bytes("L12")); - tested.startRewardsRedirection(address(0), to); - } - - function testFuzz_startRewardsRedirection_6(address from) public { - console.log("Should revert if to account is zero address"); - - // Ensure from is not the zero address - vm.assume(from != address(0)); - - // Expect revert - vm.expectRevert(bytes("L13")); - tested.startRewardsRedirection(from, address(0)); - } - - function testFuzz_startRewardsRedirection_7(address account) public { - console.log("Should revert if from and to are the same account"); - - // Ensure account is not the zero address - vm.assume(account != address(0)); - - // Expect revert - vm.expectRevert(bytes("L14")); - tested.startRewardsRedirection(account, account); - } - - function testFuzz_startRewardsRedirection_8( - address from, - address to, - address otherAccount - ) public { - console.log("Should revert if caller is neither the owner nor the from account"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Ensure other account is neither the owner nor the from account nor the zero address - vm.assume(otherAccount != address(0)); - vm.assume(otherAccount != from); - vm.assume(otherAccount != globalOwner.owner()); - - // Expect revert - vm.expectRevert(bytes("L15")); - vm.prank(otherAccount); - tested.startRewardsRedirection(from, to); - } - - function testFuzz_startRewardsRedirection_9(uint16 aprUD7x3, address from, address to) public { - console.log("Should success if caller is owner"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - } - - function testFuzz_startRewardsRedirection_10(uint16 aprUD7x3, address from, address to) public { - console.log("Should success if caller is from"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - vm.prank(from); - tested.startRewardsRedirection(from, to); - } - - function testFuzz_startRewardsRedirection_11( - uint16 aprUD7x3, - address from, - address to, - uint32 duration - ) public { - console.log("Should reset from and to accounts investment periods"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Move time forward to simulate investment period - vm.assume(duration > 0); - skip(duration); - - // Start redirect - tested.startRewardsRedirection(from, to); - - // Assert that block timestamp is not 0 - assertNotEq(block.timestamp, 0); - - // Assert that from and to accounts investment period is equal to block timestamp - assertEq(tested.public_accountsInfos(from).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(to).period.timestamp, block.timestamp); - } - - function testFuzz_startRewardsRedirection_12(uint16 aprUD7x3, address from, address to) public { - console.log("Should set to at from index in rewardsRedirectsFromTo"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - - // Assert that to has properly been set in rewardsRedirectsFromTo - assertEq(tested.rewardsRedirectsFromTo(from), to); - } - - function testFuzz_startRewardsRedirection_13( - uint16 aprUD7x3, - address from1, - address from2, - address to - ) public { - console.log("Should push from into at to index in rewardsRedirectsToFrom"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from1 != to); - vm.assume(from2 != to); - vm.assume(from1 != address(0)); - vm.assume(from2 != address(0)); - vm.assume(to != address(0)); - vm.assume(from1 != from2); - - // Start redirect from from1 to to - tested.startRewardsRedirection(from1, to); - - // Assert that from1 has properly been set in rewardsRedirectsToFrom - assertEq(tested.rewardsRedirectsToFrom(to, 0), from1); - - // Start redirect from from2 to to - tested.startRewardsRedirection(from2, to); - - // Assert that from2 has properly been set in rewardsRedirectsToFrom - assertEq(tested.rewardsRedirectsToFrom(to, 1), from2); - } - - // ====================================== - // === stopRewardsRedirection() function === - function testFuzz_stopRewardsRedirection_1(address from, address to) public { - console.log("Should revert if contract is paused "); - globalPause.pause(); - expectRevertPaused(); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_2(address from, address to) public { - console.log("Should revert if from account is blacklisted"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Blacklist account - globalBlacklist.blacklist(from); - - // Expect revert - expectRevertRestricted(); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_3(address from, address to) public { - console.log("Should revert if to account is blacklisted"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Blacklist account - globalBlacklist.blacklist(to); - - // Expect revert - expectRevertRestricted(); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_4(address to) public { - console.log("Should revert if from account is zero address"); - - // Ensure to is not the zero address - vm.assume(to != address(0)); - - // Expect revert - vm.expectRevert(bytes("L16")); - tested.stopRewardsRedirection(address(0), to); - } - - function testFuzz_stopRewardsRedirection_5(address from) public { - console.log("Should revert if to account is zero address"); - - // Ensure from is not the zero address - vm.assume(from != address(0)); - - // Expect revert - vm.expectRevert(bytes("L17")); - tested.stopRewardsRedirection(from, address(0)); - } - - function testFuzz_stopRewardsRedirection_6( - address from, - address to, - address otherAccount - ) public { - console.log("Should revert if caller is neither the owner nor the from account"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Ensure other account is neither the owner nor the from account nor the zero address - vm.assume(otherAccount != address(0)); - vm.assume(otherAccount != from); - vm.assume(otherAccount != globalOwner.owner()); - - // Expect revert - vm.expectRevert(bytes("L18")); - vm.prank(otherAccount); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_7(uint16 aprUD7x3, address from, address to) public { - console.log("Should success if caller is owner"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_8(uint16 aprUD7x3, address from, address to) public { - console.log("Should success if caller is from"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - vm.prank(from); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_9(address from, address to) public { - console.log("Should revert there were no redirect for given from and to accounts"); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Expect revert - vm.expectRevert(bytes("L19")); - vm.prank(from); - tested.stopRewardsRedirection(from, to); - } - - function testFuzz_stopRewardsRedirection_10( - uint16 aprUD7x3, - address from, - address to, - uint32 duration - ) public { - console.log("Should reset from and to accounts investment periods"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - - // Move time forward to simulate investment period - vm.assume(duration > 0); - skip(duration); - - // Stop redirect - tested.stopRewardsRedirection(from, to); - - // Assert that block timestamp is not 0 - assertNotEq(block.timestamp, 0); - - // Assert that from and to accounts investment period is equal to block timestamp - assertEq(tested.public_accountsInfos(from).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(to).period.timestamp, block.timestamp); - } - - function testFuzz_stopRewardsRedirection_11(uint16 aprUD7x3, address from, address to) public { - console.log( - "Should reset to address at index from in rewardsRedirectsFromTo to zero address" - ); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - - // Assert that rewardsRedirectsFromTo[from] is currently equal to to - assertEq(tested.rewardsRedirectsFromTo(from), to); - - // Stop redirect - tested.stopRewardsRedirection(from, to); - - // Assert that rewardsRedirectsFromTo[from] is now equal to zero address - assertEq(tested.rewardsRedirectsFromTo(from), address(0)); - } - - function testFuzz_stopRewardsRedirection_12(uint16 aprUD7x3, address from, address to) public { - console.log("Should properly remove from address from index to in rewardsRedirectsToFrom"); - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Start redirect - tested.startRewardsRedirection(from, to); - - // Assert that rewardsRedirectsToFrom[to][] is currently equal to from - assertEq(tested.rewardsRedirectsToFrom(to, 0), from); - - // Stop redirect - tested.stopRewardsRedirection(from, to); - - // Assert that index doesn't exist anymore - vm.expectRevert(); - tested.rewardsRedirectsToFrom(to, 0); - } - - function testFuzz_stopRewardsRedirection_13( - uint16 aprUD7x3, - address from1, - address from2, - address from3, - address to - ) public { - console.log( - "Shouldn't let empty array slot and fill them with last element of the rewardsRedirectsToFrom array" - ); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Ensure accounts different and not not the zero address - vm.assume(from1 != to); - vm.assume(from2 != to); - vm.assume(from3 != to); - vm.assume(from1 != from2); - vm.assume(from1 != from3); - vm.assume(from2 != from3); - vm.assume(from1 != address(0)); - vm.assume(from2 != address(0)); - vm.assume(from3 != address(0)); - vm.assume(to != address(0)); - - // Start redirect all from to to - tested.startRewardsRedirection(from1, to); - tested.startRewardsRedirection(from2, to); - tested.startRewardsRedirection(from3, to); - - // Assert that they have properly been set in rewardsRedirectsToFrom - assertEq(tested.rewardsRedirectsToFrom(to, 0), from1); - assertEq(tested.rewardsRedirectsToFrom(to, 1), from2); - assertEq(tested.rewardsRedirectsToFrom(to, 2), from3); - - // Stop redirect from2 to to - tested.stopRewardsRedirection(from2, to); - - // Assert that index have been properly updated without letting blank slot - assertEq(tested.rewardsRedirectsToFrom(to, 0), from1); - assertEq(tested.rewardsRedirectsToFrom(to, 1), from3); - - // Assert that the array has not third item anymore - vm.expectRevert(); - tested.rewardsRedirectsToFrom(to, 2); - } - - // ========================= - // === getAPR() function === - function test_getAPR_1() public { - console.log( - "Should not revert and return 0 before APR is manually set (first APR is created to 0% during init)" - ); - - // Expect returning 0 - assertEq(tested.getAPR(), 0); - } - - function testFuzz_getAPR_2(uint16 newAPRUD7x3) public { - console.log("Should return last set APR"); - - // Set a new latest APR and ensure getAPR() returns it - vm.assume(newAPRUD7x3 > 0); - tested.setAPR(newAPRUD7x3); - assertEq(tested.getAPR(), newAPRUD7x3); - } - - // ================================== - // === _distributeRewards() function === - function testFuzz__distributeRewards_1(address account, uint256 amount) public { - console.log("Should return false when not implemented"); - // Note: as we don't call set_distributeRewards_Implemented(true) the function - // behave like it's not implemented - assertFalse(tested.public_distributeRewards(account, amount)); - } - - // ========================================== - // === _calculatePeriodRewards() function === - function testFuzz__calculatePeriodRewards_1( - uint8 decimals, - uint40 beginTimestamp, - uint40 endTimestamp, - uint16 aprUD7x3, - uint256 investedAmount - ) public { - console.log( - "Shouldn't overflow/underflow before 100T of invested amount and up to 18 decimals." - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Ensure beginTimestamp is before endTimestamp - vm.assume(beginTimestamp < endTimestamp); - - // Calculate rewards (shouldn't revert) - tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - } - - function testFuzz__calculatePeriodRewards_2( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint40 beginTimestamp, - uint40 endTimestamp - ) public { - console.log( - "Should, no matter the precision loss, never apply an APR greater than the real one" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Ensure beginTimestamp is before endTimestamp - vm.assume(beginTimestamp < endTimestamp); - - // Get rewards - uint256 rewards = tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - // Assert that rewards are greater than 0 (prevent division by 0) - vm.assume(rewards > 0); - - // Compute applied APR from rewards, elapsed time and invested amount - // - Convert rewards and investedAmount to SUD - uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); - uint256 investedAmountSUD = SUD.fromAmount(investedAmount, decimals); - - // - Compute growth of investedAmount after rewards - uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / investedAmountSUD; - - // - Compute elapsed time in years - uint256 elaspedTimeSUD = SUD.fromInt(endTimestamp - beginTimestamp, decimals); - uint256 elapsedYearsSUD = (elaspedTimeSUD * SUD.fromInt(1, decimals)) / - SUD.fromInt(365 days, decimals); - - // - Obtain applied APR from above values - uint256 appliedAPRSUD = (growthSUD * SUD.fromInt(1, decimals)) / elapsedYearsSUD; - uint256 appliedAPRUD7x3 = SUD.toRate(appliedAPRSUD, decimals); - - // Ensure applied APR is not greated than real one - assertLe(appliedAPRUD7x3, aprUD7x3); - } - - function testFuzz__calculatePeriodRewards_3( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint40 beginTimestamp, - uint40 endTimestamp - ) public { - console.log("Should properly apply the given APR"); - - // Bound decimals to [3, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Ensure APR is greater than 1% - aprUD7x3 = uint16(bound(aprUD7x3, 1 * 10 ** 3, type(uint16).max)); - - // Ensure invested amount is greater than 1000 units and caped to 100T - investedAmount = bound( - investedAmount, - 1000 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); - - // Ensure beginTimestamp is before endTimestamp and is forward of at least 10 days - vm.assume(beginTimestamp < type(uint40).max - 10 days); - endTimestamp = uint40(bound(endTimestamp, beginTimestamp + 10 days, type(uint40).max)); - - // Get rewards - uint256 rewards = tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - // Assert that rewards are greater than 0 (prevent division by 0) - vm.assume(rewards > 0); - - // Compute applied APR from rewards, elapsed time and invested amount - // - Convert rewards and investedAmount to SUD - uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); - uint256 investedAmountSUD = SUD.fromAmount(investedAmount, decimals); - - // - Compute growth of investedAmount after rewards - uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / investedAmountSUD; - - // - Compute elapsed time in years - uint256 elaspedTimeSUD = SUD.fromInt(endTimestamp - beginTimestamp, decimals); - uint256 elapsedYearsSUD = (elaspedTimeSUD * SUD.fromInt(1, decimals)) / - SUD.fromInt(365 days, decimals); - - // - Obtain applied APR from above values - uint256 appliedAPRSUD = (growthSUD * SUD.fromInt(1, decimals)) / elapsedYearsSUD; - uint256 appliedAPRUD7x3 = SUD.toRate(appliedAPRSUD, decimals); - - // Compute difference between given and applied APRs - uint256 difference = aprUD7x3 - appliedAPRUD7x3; - - // Ensure difference is in an acceptable range - // Note: As lower decimals number incur higher precision loss on short investment - // periods with low invested amounts or APRs, the acceptable range is higher for - // lower decimals number - if (decimals == 0) - assertLe(difference, 10000); // 10% - else if (decimals == 1) - assertLe(difference, 1000); // 1% - else if (decimals == 2) - assertLe(difference, 100); // 0.1% - else assertLe(difference, 10); // 0.01% - } - - function testFuzz__calculatePeriodRewards_4( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint40 beginTimestamp, - uint40 endTimestamp - ) public { - console.log( - "Should, no matter the precision loss, never apply a given period greater than the real one" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Ensure beginTimestamp is before endTimestamp - vm.assume(beginTimestamp < endTimestamp); - - // Get rewards - uint256 rewards = tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - // Assert that rewards are greater than 0 (prevent division by 0) - vm.assume(rewards > 0); - - // Compute applied elapsed time from rewards, APR and invested amount - // - Convert rewards, investedAmount and APR to SUD - uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); - uint256 investedAmountSUD = SUD.fromAmount(investedAmount, decimals); - uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); - - // - Compute growth of investedAmount after rewards - uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / investedAmountSUD; - - // - Obtain applied elapsed time from above values - uint256 appliedElapsedYearSUD = (growthSUD * SUD.fromInt(1, decimals)) / aprSUD; - uint256 appliedElapsedTimeSUD = (appliedElapsedYearSUD * SUD.fromInt(365 days, decimals)) / - SUD.fromInt(1, decimals); - uint256 appliedElapsedTime = SUD.toInt(appliedElapsedTimeSUD, decimals); - - // Ensure applied elapsed time is not greater than real one - assertLe(appliedElapsedTime, endTimestamp - beginTimestamp); - } - - function testFuzz__calculatePeriodRewards_5( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint40 beginTimestamp, - uint40 endTimestamp - ) public { - console.log("Should properly apply the given period"); - - // Bound decimals to [3, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Ensure APR is greater than 1% - aprUD7x3 = uint16(bound(aprUD7x3, 1 * 10 ** 3, type(uint16).max)); - - // Ensure invested amount is greater than 1000 units and caped to 100T - investedAmount = bound( - investedAmount, - 1000 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); - - // Ensure beginTimestamp is before endTimestamp and is forward of at least 10 days - vm.assume(beginTimestamp < type(uint40).max - 100 days); - endTimestamp = uint40(bound(endTimestamp, beginTimestamp + 10 days, type(uint40).max)); - - // Get rewards - uint256 rewards = tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - // Assert that rewards are greater than 0 (prevent division by 0) - vm.assume(rewards > 0); - - // Compute applied elapsed time from rewards, APR and invested amount - // - Convert rewards, investedAmount and APR to SUD - uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); - uint256 investedAmountSUD = SUD.fromAmount(investedAmount, decimals); - uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); - - // - Compute growth of investedAmount after rewards - uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / investedAmountSUD; - - // - Obtain applied elapsed time from above values - uint256 appliedElapsedYearSUD = (growthSUD * SUD.fromInt(1, decimals)) / aprSUD; - uint256 appliedElapsedTimeSUD = (appliedElapsedYearSUD * SUD.fromInt(365 days, decimals)) / - SUD.fromInt(1, decimals); - uint256 appliedElapsedTime = SUD.toInt(appliedElapsedTimeSUD, decimals); - - // Compute difference between given and applied elapsed times - uint256 givenElapsedTime = endTimestamp - beginTimestamp; - uint256 difference = givenElapsedTime - appliedElapsedTime; - - // Ensure that difference is less than 1 day - - // Ensure difference is in an acceptable range - // Note: As lower decimals number incur higher precision loss on short investment - // periods with low invested amounts or APRs, the acceptable range is higher for - // lower decimals number - if (decimals == 0) assertLe(difference, 40 days); - else if (decimals == 1) assertLe(difference, 4 days); - else if (decimals == 2) assertLe(difference, 1 days); - else assertLe(difference, 1 days); - } - - function testFuzz__calculatePeriodRewards_6( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint40 beginTimestamp, - uint40 endTimestamp - ) public { - console.log( - "Should, no matter the precision loss, never apply an invested amount greater than the real one" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Ensure beginTimestamp is before endTimestamp - vm.assume(beginTimestamp < endTimestamp); - - // Get rewards - uint256 rewards = tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - // Assert that rewards are greater than 0 (prevent division by 0) - vm.assume(rewards > 0); - - // Compute applied invested amount from rewards, APR and elapsed time - // - Convert rewards, APR to SUD - uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); - uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); - - // - Compute elasped time in years - uint256 elaspedTimeSUD = SUD.fromInt(endTimestamp - beginTimestamp, decimals); - uint256 elapsedYearsSUD = (elaspedTimeSUD * SUD.fromInt(1, decimals)) / - SUD.fromInt(365 days, decimals); - - // - Compute growth of investedAmount after rewards - uint256 growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1, decimals); - - // - Obtain applied invested amount from above values - uint256 appliedInvestedAmountSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / growthSUD; - uint256 appliedInvestedAmount = SUD.toAmount(appliedInvestedAmountSUD, decimals); - - // Ensure applied invested amount is not greater than real one - assertLe(appliedInvestedAmount, investedAmount); - } - - function testFuzz__calculatePeriodRewards_7( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint40 beginTimestamp, - uint40 endTimestamp - ) public { - console.log("Should properly apply an invested amount"); - - // Bound decimals to [3, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Ensure APR is greater than 1% - aprUD7x3 = uint16(bound(aprUD7x3, 1 * 10 ** 3, type(uint16).max)); - - // Ensure invested amount is greater than 1000 units and caped to 100T - investedAmount = bound( - investedAmount, - 1000 * 10 ** decimals, - 100_000_000_000_000 * 10 ** decimals - ); - - // Ensure beginTimestamp is before endTimestamp and is forward of at least 10 days - vm.assume(beginTimestamp < type(uint40).max - 10 days); - endTimestamp = uint40(bound(endTimestamp, beginTimestamp + 10 days, type(uint40).max)); - - // Get rewards - uint256 rewards = tested.public_calculatePeriodRewards( - beginTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - // Assert that rewards are greater than 0 (prevent division by 0) - vm.assume(rewards > 0); - - // Compute applied invested amount from rewards, APR and elapsed time - // - Convert rewards, APR to SUD - uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); - uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); - - // - Compute elasped time in years - uint256 elaspedTimeSUD = SUD.fromInt(endTimestamp - beginTimestamp, decimals); - uint256 elapsedYearsSUD = (elaspedTimeSUD * SUD.fromInt(1, decimals)) / - SUD.fromInt(365 days, decimals); - - // - Compute growth of investedAmount after rewards - uint256 growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1, decimals); - - // - Obtain applied invested amount from above values - uint256 appliedInvestedAmountSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / growthSUD; - uint256 appliedInvestedAmount = SUD.toAmount(appliedInvestedAmountSUD, decimals); - - // Compute difference between given and applied invested amounts - uint256 difference = investedAmount - appliedInvestedAmount; - - // Ensure difference is in an acceptable range - // Note: As lower decimals number incur higher precision loss on short investment - // periods with low invested amounts or APRs, the acceptable range is higher for - // lower decimals number - if (decimals == 0) - assertLe(difference, 4000 * 10 ** decimals); // 4000 units - else if (decimals == 1) - assertLe(difference, 400 * 10 ** decimals); // 400 units - else if (decimals == 2) - assertLe(difference, 40 * 10 ** decimals); // 40 units - else assertLe(difference, 4 * 10 ** decimals); // 4 units - } - - // ==================================== - // === _deepInvestmentOf() function === - function testFuzz__deepInvestmentOf_1(address account) public { - console.log("Should return 0 when no investment"); - - assertEq(tested.public_deepInvestmentOf(account), 0); - } - - function testFuzz__deepInvestmentOf_2( - uint16 aprUD7x3, - address account1, - address account2, - address account3, - uint256 amount - ) public { - console.log( - "Should return investment of account only if no other account redirect its rewards to to it" - ); - - // Ensure 3 accounts are different - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** investedToken.decimals()); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Make the three accounts investing - vm.prank(account1); - tested.stake(amount + 1); - vm.prank(account2); - tested.stake(amount + 2); - vm.prank(account3); - tested.stake(amount + 3); - - // Assert that deep investment of account1 is equal to its investment - assertEq(tested.public_deepInvestmentOf(account1), amount + 1); - - // Assert that deep investment of account2 is equal to its investment - assertEq(tested.public_deepInvestmentOf(account2), amount + 2); - - // Assert that deep investment of account3 is equal to its investment - assertEq(tested.public_deepInvestmentOf(account3), amount + 3); - } - - function testFuzz__deepInvestmentOf_3( - uint16 aprUD7x3, - address account1, - address account2, - address account3, - uint256 amount - ) public { - console.log( - "Should return sum of account investment plus one of all other accounts that redirects to it" - ); - - // Ensure 3 accounts are different and not the zero address - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account3 != address(0)); - - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** investedToken.decimals()); - - // Set first random APR - tested.setAPR(aprUD7x3); - - // Invest with account1 - vm.prank(account1); - tested.stake(amount + 1); - vm.prank(account2); - tested.stake(amount + 2); - vm.prank(account3); - tested.stake(amount + 3); - - // Assert that deep investment of account1 is equal to its investment - assertEq(tested.public_deepInvestmentOf(account1), amount + 1); - - // Redirect account2 rewards to account1 - tested.startRewardsRedirection(account2, account1); - - // Assert that deep investment of account1 is equal to its investment plus account2 investment - assertEq(tested.public_deepInvestmentOf(account1), amount + 1 + amount + 2); - - // Redirect account3 rewards to account2 - tested.startRewardsRedirection(account3, account2); - - // Assert that deep investment of account1 is equal to its investment plus account2 investment plus account3 investment - assertEq(tested.public_deepInvestmentOf(account1), amount + 1 + amount + 2 + amount + 3); - - // Stop redirect account2 rewards to account1 - tested.stopRewardsRedirection(account2, account1); - - // Assert that deep investment of account1 is equal to its investment plus account3 investment - assertEq(tested.public_deepInvestmentOf(account1), amount + 1); - - // Assert that deep investment of account2 is equal to its investment plus account3 investment - assertEq(tested.public_deepInvestmentOf(account2), amount + 2 + amount + 3); - } - - // ============================= - // === _rewardsOf() function === - function testFuzz__rewardsOf_1(uint8 decimals, bool autocompound) public { - console.log("Should return 0 when not APR checkpoints"); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - assertEq(tested.public_rewardsOf(address(1234), autocompound), 0); - } - - function testFuzz__rewardsOf_2(uint8 decimals, uint16 aprUD7x3, bool autocompound) public { - console.log("Should return 0 when APR checkpoints but no investment"); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap APR to half its max value - aprUD7x3 = uint16(bound(aprUD7x3, 0, type(uint16).max / 2)); - - // Set first random APR value and ensure rewards of returns 0 - tested.setAPR(aprUD7x3); - assertEq(tested.public_rewardsOf(address(1234), autocompound), 0); - - // Set second random APR value and ensure rewards of returns 0 - tested.setAPR(aprUD7x3 * 2); - assertEq(tested.public_rewardsOf(address(1234), autocompound), 0); - } - - function testFuzz__rewardsOf_3( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint256 investmentDuration, - bool autocompound - ) public { - console.log( - "Should properly calculate rewards when no new APR checkpoint after investment" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Set random APR - tested.setAPR(aprUD7x3); - - // Invest random amount of tokens - vm.prank(address(1234)); - tested.stake(investedAmount); - - // Simulate investment period - uint40 startTimestamp = uint40(block.timestamp); - investmentDuration = bound(investmentDuration, 0, type(uint40).max - startTimestamp); // prevent overflow - skip(investmentDuration); - uint40 endTimestamp = uint40(block.timestamp); - - // Calculate expected rewards - uint256 expectedRewards = tested.public_calculatePeriodRewards( - startTimestamp, - endTimestamp, - aprUD7x3, - investedAmount - ); - - assertEq(tested.public_rewardsOf(address(1234), autocompound), expectedRewards); - } - - function testFuzz__rewardsOf_4( - uint8 decimals, - uint16 aprUD7x3, - uint256 investedAmount, - uint256 numberOfCheckpoints, - bool autocompound, - uint40 investmentDuration - ) public { - console.log( - "Should properly calculate rewards when one or many checkpoints have been added after investment" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Cap interval between checkpoints to 365 days - investmentDuration = uint40(bound(investmentDuration, 0, 365 days)); - - // Cap number of checkpoints to 200 - numberOfCheckpoints = bound(numberOfCheckpoints, 1, 100); - - // Create random number of checkpoints after investment - uint256 expectedRewards = 0; - uint40 latestCheckpointTimestamp = uint40(block.timestamp); - uint16 latestCheckpointApr = aprUD7x3; - - // Create first APR - tested.setAPR(latestCheckpointApr); - - // Invest random amount of tokens - vm.prank(address(1234)); - tested.stake(investedAmount); - - // Create random number of checkpoints after investment - for (uint256 i = 0; i < numberOfCheckpoints; i++) { - uint40 newCheckpointTimestamp = uint40(block.timestamp); - uint16 newCheckpointApr = aprUD7x3; - tested.setAPR(newCheckpointApr); - - // Move forward a random amount of time - skip(investmentDuration); - - // Calculate expected rewards for this past period - expectedRewards += tested.public_calculatePeriodRewards( - latestCheckpointTimestamp, - newCheckpointTimestamp, - latestCheckpointApr, - investedAmount + (autocompound ? expectedRewards : 0) - ); - - latestCheckpointTimestamp = newCheckpointTimestamp; - latestCheckpointApr = newCheckpointApr; - } - - // Calculate rewards from last checkpoint to now - expectedRewards += tested.public_calculatePeriodRewards( - latestCheckpointTimestamp, - uint40(block.timestamp), - latestCheckpointApr, - investedAmount + (autocompound ? expectedRewards : 0) - ); - - // Ensure calculated rewards are equal to expected rewards - uint256 rewards = tested.public_rewardsOf(address(1234), autocompound); - assertEq(rewards, expectedRewards); - } - - function testFuzz__rewardsOf_5( - uint8 decimals, - uint16 aprUD7x3, - address account1, - address account2, - address account3, - uint256 investedAmount, - uint256 numberOfCheckpoints, - bool autocompound, - uint40 investmentDuration - ) public { - console.log( - "Should properly calculate rewards when given account is the target of one or many rewards redirections" - ); - - // Ensure 3 accounts are different and not equal to zero address - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account3 != address(0)); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Cap interval between checkpoints to 365 days - investmentDuration = uint40(bound(investmentDuration, 0, 365 days)); - - // Cap number of checkpoints to 200 - numberOfCheckpoints = bound(numberOfCheckpoints, 1, 100); - - // Create random number of checkpoints after investment - uint256 expectedRewards = 0; - uint40 latestCheckpointTimestamp = uint40(block.timestamp); - uint16 latestCheckpointApr = aprUD7x3; - - // Create first APR - tested.setAPR(latestCheckpointApr); - - // Invest random amount of tokens with 3 accounts - vm.prank(account1); - tested.stake(investedAmount + 1); - vm.prank(account2); - tested.stake(investedAmount + 2); - vm.prank(account3); - tested.stake(investedAmount + 3); - - // Redirect account2 rewards to account1 - tested.startRewardsRedirection(account2, account1); - - // Redirect account3 rewards to account2 - tested.startRewardsRedirection(account3, account2); - - // Consider that now account1 deposited amount is equal to account1 + account2 deposited amounts - uint256 depositedAmount = investedAmount + 1 + investedAmount + 2 + investedAmount + 3; - - // Create random number of checkpoints after investment - for (uint256 i = 0; i < numberOfCheckpoints; i++) { - uint40 newCheckpointTimestamp = uint40(block.timestamp); - uint16 newCheckpointApr = aprUD7x3; - tested.setAPR(newCheckpointApr); - - // Move forward a random amount of time - skip(investmentDuration); - - // Calculate expected rewards for this past period - expectedRewards += tested.public_calculatePeriodRewards( - latestCheckpointTimestamp, - newCheckpointTimestamp, - latestCheckpointApr, - depositedAmount + (autocompound ? expectedRewards : 0) - ); - - latestCheckpointTimestamp = newCheckpointTimestamp; - latestCheckpointApr = newCheckpointApr; - } - - // Calculate rewards from last checkpoint to now - expectedRewards += tested.public_calculatePeriodRewards( - latestCheckpointTimestamp, - uint40(block.timestamp), - latestCheckpointApr, - depositedAmount + (autocompound ? expectedRewards : 0) - ); - - // Ensure calculated rewards are equal to expected rewards - uint256 rewards = tested.public_rewardsOf(account1, autocompound); - assertEq(rewards, expectedRewards); - } - - // =============================================== - // === _deepResetInvestmentPeriodOf() function === - function testFuzz__deepResetInvestmentPeriodOf_1( - uint16 aprUD7x3, - address account, - uint32 duration - ) public { - console.log("Should reset given account investment period"); - - // Set random APR - tested.setAPR(aprUD7x3); - - // Assert that current account investment period block timestamp is 0 - assertEq(tested.public_accountsInfos(account).period.timestamp, 0); - - // Skip random amount of time to simulate investment period - skip(duration); - - // Call _deepResetInvestmentPeriodOf() - tested.public_deepResetInvestmentPeriodOf(account); - - // Assert that account investment period has been reset - assertEq(tested.public_accountsInfos(account).period.timestamp, block.timestamp); - } - - function testFuzz__deepResetInvestmentPeriodOf_2( - uint16 aprUD7x3, - address account1, - address account2, - address account3, - uint256 amount, - uint32 duration - ) public { - console.log( - "Should not reset account investment period (timestamp + apr) of accounts that aren't redirecting rewards to given account" - ); - - // Set random APR - tested.setAPR(aprUD7x3); - - // Assert that accounts are different - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** investedToken.decimals()); - - // Invest random amount of tokens with 3 accounts - // This will initialize their investment periods - vm.prank(account1); - tested.stake(amount + 1); - vm.prank(account2); - tested.stake(amount + 2); - vm.prank(account3); - tested.stake(amount + 3); - - // Assert that current accounts investment period is 1 (first block timestamp) - assertEq(tested.public_accountsInfos(account1).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account2).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account3).period.timestamp, 1); - - // Skip random amount of time to simulate investment period - skip(duration); - - // Set new APR - uint16 newAPRUD7x3 = aprUD7x3 < type(uint16).max ? aprUD7x3 + 1 : aprUD7x3 - 1; - tested.setAPR(newAPRUD7x3); - - // Call _deepResetInvestmentPeriodOf() on account - tested.public_deepResetInvestmentPeriodOf(account1); - - // Assert that account investment period has been reset - assertEq(tested.public_accountsInfos(account1).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account1).period.ref.cursorIndex, 2); - - // Assert that other accounts investment period haven't been reset - assertEq(tested.public_accountsInfos(account2).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account2).period.ref.cursorIndex, 1); - - assertEq(tested.public_accountsInfos(account3).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account3).period.ref.cursorIndex, 1); - } - - function testFuzz__deepResetInvestmentPeriodOf_3( - uint16 aprUD7x3, - address account1, - address account2, - address account3, - uint256 amount, - uint32 duration - ) public { - console.log( - "Should reset account investment period (timestamp + apr) of accounts that are redirecting rewards to given account" - ); - - // Set random APR - tested.setAPR(aprUD7x3); - - // Assert that accounts are different and not zero addresses - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account3 != address(0)); - - // Cap amount to 100T - amount = bound(amount, 0, 100_000_000_000_000 * 10 ** investedToken.decimals()); - - // Invest random amount of tokens with 3 accounts - // This will initialize their investment periods - vm.prank(account1); - tested.stake(amount + 1); - vm.prank(account2); - tested.stake(amount + 2); - vm.prank(account3); - tested.stake(amount + 3); - - // Redirect account2 rewards to account1 - tested.startRewardsRedirection(account2, account1); - - // Redirect account3 rewards to account2 - tested.startRewardsRedirection(account3, account2); - - // Assert that current accounts investment period is 1 (first block timestamp) - assertEq(tested.public_accountsInfos(account1).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account2).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account3).period.timestamp, 1); - - // Skip random amount of time to simulate investment period - duration = uint32(bound(duration, 1, type(uint32).max)); - skip(duration); - - // Set new APR - uint16 newAPRUD7x3 = aprUD7x3 < type(uint16).max ? aprUD7x3 + 1 : aprUD7x3 - 1; - tested.setAPR(newAPRUD7x3); - - // Call _deepResetInvestmentPeriodOf() on account - tested.public_deepResetInvestmentPeriodOf(account1); - - // Assert that account investment period has been reset - assertEq(tested.public_accountsInfos(account1).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account1).period.ref.cursorIndex, 2); - - // Assert that other accounts investment period have been reset - assertEq(tested.public_accountsInfos(account2).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account2).period.ref.cursorIndex, 2); - - assertEq(tested.public_accountsInfos(account3).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account3).period.ref.cursorIndex, 2); - } - - // =========================================== - // === _beforeInvestmentChange() function === - function test__beforeInvestmentChange_1( - uint8 decimals, - uint256 investedAmount, - uint16 aprUD7x3, - uint40 investmentDuration, - bool autocompound - ) public { - console.log( - "Should call claim rewards once / no infinite re-entrancy if _distributeRewards() itself indirectly or directly calls _beforeInvestmentChange()" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Cap interval between checkpoints to 100 years - investmentDuration = uint40(bound(investmentDuration, 0, 100 * 365 days)); - - // Implements _distributeRewards() and make it call _beforeInvestmentChange() again - tested.set_distributeRewards_Implemented(true); - tested.set_distributeRewards_ResetInvestmentPeriod(true); - - // Simulate investment period - tested.setAPR(aprUD7x3); - vm.prank(address(1234)); - tested.stake(investedAmount); - skip(investmentDuration); - - // Call _beforeInvestmentChange() - tested.public_beforeInvestmentChange(address(1234), autocompound); - - // Check that _distributeRewards() has been called once - // Note that we use "lower than equal" as the _distributeRewards() function may not be - // called at all if rewards are equal to 0 - assertLe(tested._distributeRewards_CallsCount(), 1); - } - - function test__beforeInvestmentChange_2( - uint8 decimals, - uint256 investedAmount, - uint16 aprUD7x3, - uint40 investmentDuration, - bool autocompound, - bool isImplemented - ) public { - console.log( - "Should rely on _distributeRewards() to distribute rewards if implemented (= returns true) else on virtual balance" - ); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Cap interval between checkpoints to 100 years - investmentDuration = uint40(bound(investmentDuration, 0, 100 * 365 days)); - - // Randomly implement _distributeRewards() - tested.set_distributeRewards_Implemented(isImplemented); - - // Simulate investment period - tested.setAPR(aprUD7x3); - vm.prank(address(1234)); - tested.stake(investedAmount); - skip(investmentDuration); - - // Store expected rewards and old staked and virtual balances - uint256 expectedRewards = tested.public_rewardsOf(address(1234), autocompound); - uint256 oldStakedBalance = tested.stakeOf(address(1234)); - uint256 oldVirtualBalance = tested.public_accountsInfos(address(1234)).virtualBalance; - - // Call _beforeInvestmentChange() - tested.public_beforeInvestmentChange(address(1234), autocompound); - - // If _distributeRewards() is implemented - if (isImplemented) { - // Ensure that is has been called - assertLe(tested._distributeRewards_CallsCount(), 1); - - // Ensure that it has properly minted rewards - uint256 newStakedBalance = tested.stakeOf(address(1234)); - assertEq(newStakedBalance, oldStakedBalance + expectedRewards); - - // Ensure that the virtual balance ends on 0 - uint256 newVirtualBalance = tested.public_accountsInfos(address(1234)).virtualBalance; - assertEq(newVirtualBalance, 0); - } - // If it isn't - else { - // Ensure that it hasn't been called - assertEq(tested._distributeRewards_CallsCount(), 0); - - // Ensure that rewards have been properly accumulated in virtual balance - uint256 newVirtualBalance = tested.public_accountsInfos(address(1234)).virtualBalance; - assertEq(newVirtualBalance, oldVirtualBalance + expectedRewards); - } - } - - function test__beforeInvestmentChange_3( - uint8 decimals, - address account1, - address account2, - address account3, - uint256 investedAmount, - uint16 aprUD7x3, - uint32 duration, - bool autocompound, - bool isImplemented - ) public { - console.log( - "Should distribute rewards to account at the very end of the redirection chain" - ); - // Set random APR - tested.setAPR(aprUD7x3); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Randomly implement _distributeRewards() - tested.set_distributeRewards_Implemented(isImplemented); - - // Assert that accounts are different and not zero addresses - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account3 != address(0)); - - // Cap investedAmount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Invest random amount of tokens with 3 accounts - // This will initialize their investment periods - vm.prank(account1); - tested.stake(investedAmount + 1); - vm.prank(account2); - tested.stake(investedAmount + 2); - vm.prank(account3); - tested.stake(investedAmount + 3); - - // Redirect account2 rewards to account1 - tested.startRewardsRedirection(account2, account1); - - // Redirect account3 rewards to account2 - tested.startRewardsRedirection(account3, account2); - - // Assert that current accounts stakes are equal to invested amount - assertEq(tested.stakeOf(account1), investedAmount + 1); - assertEq(tested.stakeOf(account2), investedAmount + 2); - assertEq(tested.stakeOf(account3), investedAmount + 3); - - // Assert that all accounts virtual balances are empty - assertEq(tested.public_accountsInfos(account1).virtualBalance, 0); - assertEq(tested.public_accountsInfos(account2).virtualBalance, 0); - assertEq(tested.public_accountsInfos(account3).virtualBalance, 0); - - // Skip random amount of time to simulate investment period - duration = uint32(bound(duration, 1, type(uint32).max)); - skip(duration); - - // Compute account 1 rewards - uint256 account1Rewards = tested.public_rewardsOf(account1, autocompound); - - // Call _beforeInvestmentChange() - tested.public_beforeInvestmentChange(account1, autocompound); - - // Assert that account2 and account3 stakes and virtual balances haven't changed (they received not rewards) - assertEq(tested.stakeOf(account2), investedAmount + 2); - assertEq(tested.stakeOf(account3), investedAmount + 3); - assertEq(tested.public_accountsInfos(account2).virtualBalance, 0); - assertEq(tested.public_accountsInfos(account3).virtualBalance, 0); - - // Assert that account1 has received rewards - // If distribute rewards is implemented assert that rewards have been compounded to stake - if (isImplemented) { - assertEq(tested.stakeOf(account1), investedAmount + 1 + account1Rewards); - } - // Else assert that rewards have been accumulated in virtual balance - else { - assertEq(tested.public_accountsInfos(account1).virtualBalance, account1Rewards); - } - } - - function test__beforeInvestmentChange_4( - uint8 decimals, - uint256 investedAmount, - uint16 aprUD7x3, - uint40 investmentDuration, - bool autocompound, - bool isImplemented - ) public { - console.log("Should reset investment period timestamp of given account to now"); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Cap invested amount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Cap interval between checkpoints to 100 years - investmentDuration = uint40(bound(investmentDuration, 0, 100 * 365 days)); - - // Randomly implement _distributeRewards() - tested.set_distributeRewards_Implemented(isImplemented); - - // Simulate investment period - tested.setAPR(aprUD7x3); - vm.prank(address(1234)); - tested.stake(investedAmount); - skip(investmentDuration); - - // Call _beforeInvestmentChange() - tested.public_beforeInvestmentChange(address(1234), autocompound); - - // Ensure that the investment period timestamp has been updated to now - assertEq(tested.public_accountsInfos(address(1234)).period.timestamp, block.timestamp); - } - - function test__beforeInvestmentChange_5( - uint8 decimals, - address account1, - address account2, - address account3, - uint256 investedAmount, - uint16 aprUD7x3, - uint32 duration, - bool autocompound, - bool isImplemented - ) public { - console.log( - "Should reset investment period timestamp of all accounts that directly or indirectly redirect rewards to given accounts" - ); - // Set random APR - tested.setAPR(aprUD7x3); - - // Bound decimals to [0, 18] and set random invested token decimals - decimals = uint8(bound(decimals, 0, 18)); - investedToken.setDecimals(decimals); - - // Randomly implement _distributeRewards() - tested.set_distributeRewards_Implemented(isImplemented); - - // Assert that accounts are different and not zero addresses - vm.assume(account1 != account2); - vm.assume(account1 != account3); - vm.assume(account2 != account3); - vm.assume(account1 != address(0)); - vm.assume(account2 != address(0)); - vm.assume(account3 != address(0)); - - // Cap investedAmount to 100T - investedAmount = bound(investedAmount, 0, 100_000_000_000_000 * 10 ** decimals); - - // Invest random amount of tokens with 3 accounts - // This will initialize their investment periods - vm.prank(account1); - tested.stake(investedAmount + 1); - vm.prank(account2); - tested.stake(investedAmount + 2); - vm.prank(account3); - tested.stake(investedAmount + 3); - - // Redirect account2 rewards to account1 - tested.startRewardsRedirection(account2, account1); - - // Redirect account3 rewards to account2 - tested.startRewardsRedirection(account3, account2); - - // Assert that current accounts investment period is 1 (first block timestamp) - assertEq(tested.public_accountsInfos(account1).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account2).period.timestamp, 1); - assertEq(tested.public_accountsInfos(account3).period.timestamp, 1); - - // Skip random amount of time to simulate investment period - duration = uint32(bound(duration, 1, type(uint32).max)); - skip(duration); - - // Set new APR - uint16 newAPRUD7x3 = aprUD7x3 < type(uint16).max ? aprUD7x3 + 1 : aprUD7x3 - 1; - tested.setAPR(newAPRUD7x3); - - // Call _beforeInvestmentChange() - tested.public_beforeInvestmentChange(account1, autocompound); - - // Assert that account investment period has been reset - assertEq(tested.public_accountsInfos(account1).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account1).period.ref.cursorIndex, 2); - - // Assert that other accounts investment period have been reset - assertEq(tested.public_accountsInfos(account2).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account2).period.ref.cursorIndex, 2); - - assertEq(tested.public_accountsInfos(account3).period.timestamp, block.timestamp); - assertEq(tested.public_accountsInfos(account3).period.ref.cursorIndex, 2); - } + TestedContract tested; + GlobalOwner globalOwner; + GlobalPause globalPause; + GlobalBlacklist globalBlacklist; + GenericERC20 investedToken; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + GlobalPause impl2 = new GlobalPause(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + globalPause = GlobalPause(address(proxy2)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + // Deploy GenericERC20 + investedToken = new GenericERC20("Dummy Token", "DUMMY", 6); + vm.label(address(investedToken), "Invested token"); + + // Deploy tested contract + TestedContract impl5 = new TestedContract(); + ERC1967Proxy proxy5 = new ERC1967Proxy(address(impl5), ""); + tested = TestedContract(address(proxy5)); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(investedToken) + ); + vm.label(address(tested), "TestedContract"); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + address(investedToken) + ); + } + + function test_initialize_2() public { + console.log( + "Should properly set global owner, pause and blacklist" + ); + assertEq(tested.globalOwner(), address(globalOwner)); + assertEq(tested.globalPause(), address(globalPause)); + assertEq(tested.globalBlacklist(), address(globalBlacklist)); + } + + // ============================== + // === invested() function === + function test_invested_1() public { + console.log("Should return address given during initialization"); + assertEq(address(tested.invested()), address(investedToken)); + } + + // ========================= + // === setAPR() function === + function testFuzz_setAPR_1(uint16 newAPRUD7x3) public { + console.log("Should update the APR return by getAPR()"); + + tested.setAPR(newAPRUD7x3); + assertEq(tested.getAPR(), newAPRUD7x3); + } + + // ======================================= + // === startRewardsRedirection() function === + function testFuzz_startRewardsRedirection_1( + address from, + address to + ) public { + console.log("Should revert if contract is paused "); + globalPause.pause(); + expectRevertPaused(); + tested.startRewardsRedirection(from, to); + } + + function testFuzz_startRewardsRedirection_2( + address from, + address to + ) public { + console.log("Should revert if from account is blacklisted"); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Blacklist account + globalBlacklist.blacklist(from); + + // Expect revert + expectRevertRestricted(); + tested.startRewardsRedirection(from, to); + } + + function testFuzz_startRewardsRedirection_3( + address from, + address to + ) public { + console.log("Should revert if to account is blacklisted"); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Blacklist account + globalBlacklist.blacklist(to); + + // Expect revert + expectRevertRestricted(); + tested.startRewardsRedirection(from, to); + } + + function testFuzz_startRewardsRedirection_4( + uint16 aprUD7x3, + address from, + address to1, + address to2 + ) public { + console.log( + "Should revert if trying to redirect while a redirection is already active" + ); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure addresses are different and and not the zero address + vm.assume(to1 != address(0)); + vm.assume(to2 != address(0)); + vm.assume(from != address(0)); + vm.assume(to1 != to2); + vm.assume(from != to1); + vm.assume(from != to2); + + // First redirection + tested.startRewardsRedirection(from, to1); + + // Expect revert on a second redirection + vm.expectRevert(bytes("L62")); + tested.startRewardsRedirection(from, to2); + + // Now stop the first redirection + tested.stopRewardsRedirection(from, to1); + + // Second redirection should now work + tested.startRewardsRedirection(from, to2); + } + + function testFuzz_startRewardsRedirection_5(address to) public { + console.log("Should revert if from account is zero address"); + + // Ensure to is not the zero address + vm.assume(to != address(0)); + + // Expect revert + vm.expectRevert(bytes("L12")); + tested.startRewardsRedirection(address(0), to); + } + + function testFuzz_startRewardsRedirection_6(address from) public { + console.log("Should revert if to account is zero address"); + + // Ensure from is not the zero address + vm.assume(from != address(0)); + + // Expect revert + vm.expectRevert(bytes("L13")); + tested.startRewardsRedirection(from, address(0)); + } + + function testFuzz_startRewardsRedirection_7( + address account + ) public { + console.log("Should revert if from and to are the same account"); + + // Ensure account is not the zero address + vm.assume(account != address(0)); + + // Expect revert + vm.expectRevert(bytes("L14")); + tested.startRewardsRedirection(account, account); + } + + function testFuzz_startRewardsRedirection_8( + address from, + address to, + address otherAccount + ) public { + console.log( + "Should revert if caller is neither the owner nor the from account" + ); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Ensure other account is neither the owner nor the from account nor the zero address + vm.assume(otherAccount != address(0)); + vm.assume(otherAccount != from); + vm.assume(otherAccount != globalOwner.owner()); + + // Expect revert + vm.expectRevert(bytes("L15")); + vm.prank(otherAccount); + tested.startRewardsRedirection(from, to); + } + + function testFuzz_startRewardsRedirection_9( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log("Should success if caller is owner"); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + } + + function testFuzz_startRewardsRedirection_10( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log("Should success if caller is from"); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + vm.prank(from); + tested.startRewardsRedirection(from, to); + } + + function testFuzz_startRewardsRedirection_11( + uint16 aprUD7x3, + address from, + address to, + uint32 duration + ) public { + console.log( + "Should reset from and to accounts investment periods" + ); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Move time forward to simulate investment period + vm.assume(duration > 0); + skip(duration); + + // Start redirect + tested.startRewardsRedirection(from, to); + + // Assert that block timestamp is not 0 + assertNotEq(block.timestamp, 0); + + // Assert that from and to accounts investment period is equal to block timestamp + assertEq( + tested.public_accountsInfos(from).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(to).period.timestamp, + block.timestamp + ); + } + + function testFuzz_startRewardsRedirection_12( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log( + "Should set to at from index in rewardsRedirectsFromTo" + ); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + + // Assert that to has properly been set in rewardsRedirectsFromTo + assertEq(tested.rewardsRedirectsFromTo(from), to); + } + + function testFuzz_startRewardsRedirection_13( + uint16 aprUD7x3, + address from1, + address from2, + address to + ) public { + console.log( + "Should push from into at to index in rewardsRedirectsToFrom" + ); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from1 != to); + vm.assume(from2 != to); + vm.assume(from1 != address(0)); + vm.assume(from2 != address(0)); + vm.assume(to != address(0)); + vm.assume(from1 != from2); + + // Start redirect from from1 to to + tested.startRewardsRedirection(from1, to); + + // Assert that from1 has properly been set in rewardsRedirectsToFrom + assertEq(tested.rewardsRedirectsToFrom(to, 0), from1); + + // Start redirect from from2 to to + tested.startRewardsRedirection(from2, to); + + // Assert that from2 has properly been set in rewardsRedirectsToFrom + assertEq(tested.rewardsRedirectsToFrom(to, 1), from2); + } + + // ====================================== + // === stopRewardsRedirection() function === + function testFuzz_stopRewardsRedirection_1( + address from, + address to + ) public { + console.log("Should revert if contract is paused "); + globalPause.pause(); + expectRevertPaused(); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_2( + address from, + address to + ) public { + console.log("Should revert if from account is blacklisted"); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Blacklist account + globalBlacklist.blacklist(from); + + // Expect revert + expectRevertRestricted(); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_3( + address from, + address to + ) public { + console.log("Should revert if to account is blacklisted"); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Blacklist account + globalBlacklist.blacklist(to); + + // Expect revert + expectRevertRestricted(); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_4(address to) public { + console.log("Should revert if from account is zero address"); + + // Ensure to is not the zero address + vm.assume(to != address(0)); + + // Expect revert + vm.expectRevert(bytes("L16")); + tested.stopRewardsRedirection(address(0), to); + } + + function testFuzz_stopRewardsRedirection_5(address from) public { + console.log("Should revert if to account is zero address"); + + // Ensure from is not the zero address + vm.assume(from != address(0)); + + // Expect revert + vm.expectRevert(bytes("L17")); + tested.stopRewardsRedirection(from, address(0)); + } + + function testFuzz_stopRewardsRedirection_6( + address from, + address to, + address otherAccount + ) public { + console.log( + "Should revert if caller is neither the owner nor the from account" + ); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Ensure other account is neither the owner nor the from account nor the zero address + vm.assume(otherAccount != address(0)); + vm.assume(otherAccount != from); + vm.assume(otherAccount != globalOwner.owner()); + + // Expect revert + vm.expectRevert(bytes("L18")); + vm.prank(otherAccount); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_7( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log("Should success if caller is owner"); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_8( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log("Should success if caller is from"); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + vm.prank(from); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_9( + address from, + address to + ) public { + console.log( + "Should revert there were no redirect for given from and to accounts" + ); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Expect revert + vm.expectRevert(bytes("L19")); + vm.prank(from); + tested.stopRewardsRedirection(from, to); + } + + function testFuzz_stopRewardsRedirection_10( + uint16 aprUD7x3, + address from, + address to, + uint32 duration + ) public { + console.log( + "Should reset from and to accounts investment periods" + ); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + + // Move time forward to simulate investment period + vm.assume(duration > 0); + skip(duration); + + // Stop redirect + tested.stopRewardsRedirection(from, to); + + // Assert that block timestamp is not 0 + assertNotEq(block.timestamp, 0); + + // Assert that from and to accounts investment period is equal to block timestamp + assertEq( + tested.public_accountsInfos(from).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(to).period.timestamp, + block.timestamp + ); + } + + function testFuzz_stopRewardsRedirection_11( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log( + "Should reset to address at index from in rewardsRedirectsFromTo to zero address" + ); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + + // Assert that rewardsRedirectsFromTo[from] is currently equal to to + assertEq(tested.rewardsRedirectsFromTo(from), to); + + // Stop redirect + tested.stopRewardsRedirection(from, to); + + // Assert that rewardsRedirectsFromTo[from] is now equal to zero address + assertEq(tested.rewardsRedirectsFromTo(from), address(0)); + } + + function testFuzz_stopRewardsRedirection_12( + uint16 aprUD7x3, + address from, + address to + ) public { + console.log( + "Should properly remove from address from index to in rewardsRedirectsToFrom" + ); + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Start redirect + tested.startRewardsRedirection(from, to); + + // Assert that rewardsRedirectsToFrom[to][] is currently equal to from + assertEq(tested.rewardsRedirectsToFrom(to, 0), from); + + // Stop redirect + tested.stopRewardsRedirection(from, to); + + // Assert that index doesn't exist anymore + vm.expectRevert(); + tested.rewardsRedirectsToFrom(to, 0); + } + + function testFuzz_stopRewardsRedirection_13( + uint16 aprUD7x3, + address from1, + address from2, + address from3, + address to + ) public { + console.log( + "Shouldn't let empty array slot and fill them with last element of the rewardsRedirectsToFrom array" + ); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Ensure accounts different and not not the zero address + vm.assume(from1 != to); + vm.assume(from2 != to); + vm.assume(from3 != to); + vm.assume(from1 != from2); + vm.assume(from1 != from3); + vm.assume(from2 != from3); + vm.assume(from1 != address(0)); + vm.assume(from2 != address(0)); + vm.assume(from3 != address(0)); + vm.assume(to != address(0)); + + // Start redirect all from to to + tested.startRewardsRedirection(from1, to); + tested.startRewardsRedirection(from2, to); + tested.startRewardsRedirection(from3, to); + + // Assert that they have properly been set in rewardsRedirectsToFrom + assertEq(tested.rewardsRedirectsToFrom(to, 0), from1); + assertEq(tested.rewardsRedirectsToFrom(to, 1), from2); + assertEq(tested.rewardsRedirectsToFrom(to, 2), from3); + + // Stop redirect from2 to to + tested.stopRewardsRedirection(from2, to); + + // Assert that index have been properly updated without letting blank slot + assertEq(tested.rewardsRedirectsToFrom(to, 0), from1); + assertEq(tested.rewardsRedirectsToFrom(to, 1), from3); + + // Assert that the array has not third item anymore + vm.expectRevert(); + tested.rewardsRedirectsToFrom(to, 2); + } + + // ========================= + // === getAPR() function === + function test_getAPR_1() public { + console.log( + "Should not revert and return 0 before APR is manually set (first APR is created to 0% during init)" + ); + + // Expect returning 0 + assertEq(tested.getAPR(), 0); + } + + function testFuzz_getAPR_2(uint16 newAPRUD7x3) public { + console.log("Should return last set APR"); + + // Set a new latest APR and ensure getAPR() returns it + vm.assume(newAPRUD7x3 > 0); + tested.setAPR(newAPRUD7x3); + assertEq(tested.getAPR(), newAPRUD7x3); + } + + // ================================== + // === _distributeRewards() function === + function testFuzz__distributeRewards_1( + address account, + uint256 amount + ) public { + console.log("Should return false when not implemented"); + // Note: as we don't call set_distributeRewards_Implemented(true) the function + // behave like it's not implemented + assertFalse(tested.public_distributeRewards(account, amount)); + } + + // ========================================== + // === _calculatePeriodRewards() function === + function testFuzz__calculatePeriodRewards_1( + uint8 decimals, + uint40 beginTimestamp, + uint40 endTimestamp, + uint16 aprUD7x3, + uint256 investedAmount + ) public { + console.log( + "Shouldn't overflow/underflow before 100T of invested amount and up to 18 decimals." + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp + vm.assume(beginTimestamp < endTimestamp); + + // Calculate rewards (shouldn't revert) + tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + } + + function testFuzz__calculatePeriodRewards_2( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint40 beginTimestamp, + uint40 endTimestamp + ) public { + console.log( + "Should, no matter the precision loss, never apply an APR greater than the real one" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp + vm.assume(beginTimestamp < endTimestamp); + + // Get rewards + uint256 rewards = tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + // Assert that rewards are greater than 0 (prevent division by 0) + vm.assume(rewards > 0); + + // Compute applied APR from rewards, elapsed time and invested amount + // - Convert rewards and investedAmount to SUD + uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); + uint256 investedAmountSUD = SUD.fromAmount( + investedAmount, + decimals + ); + + // - Compute growth of investedAmount after rewards + uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / + investedAmountSUD; + + // - Compute elapsed time in years + uint256 elaspedTimeSUD = SUD.fromInt( + endTimestamp - beginTimestamp, + decimals + ); + uint256 elapsedYearsSUD = (elaspedTimeSUD * + SUD.fromInt(1, decimals)) / SUD.fromInt(365 days, decimals); + + // - Obtain applied APR from above values + uint256 appliedAPRSUD = (growthSUD * SUD.fromInt(1, decimals)) / + elapsedYearsSUD; + uint256 appliedAPRUD7x3 = SUD.toRate(appliedAPRSUD, decimals); + + // Ensure applied APR is not greated than real one + assertLe(appliedAPRUD7x3, aprUD7x3); + } + + function testFuzz__calculatePeriodRewards_3( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint40 beginTimestamp, + uint40 endTimestamp + ) public { + console.log("Should properly apply the given APR"); + + // Bound decimals to [3, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Ensure APR is greater than 1% + aprUD7x3 = uint16(bound(aprUD7x3, 1 * 10 ** 3, type(uint16).max)); + + // Ensure invested amount is greater than 1000 units and caped to 100T + investedAmount = bound( + investedAmount, + 1000 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp and is forward of at least 10 days + vm.assume(beginTimestamp < type(uint40).max - 10 days); + endTimestamp = uint40( + bound(endTimestamp, beginTimestamp + 10 days, type(uint40).max) + ); + + // Get rewards + uint256 rewards = tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + // Assert that rewards are greater than 0 (prevent division by 0) + vm.assume(rewards > 0); + + // Compute applied APR from rewards, elapsed time and invested amount + // - Convert rewards and investedAmount to SUD + uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); + uint256 investedAmountSUD = SUD.fromAmount( + investedAmount, + decimals + ); + + // - Compute growth of investedAmount after rewards + uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / + investedAmountSUD; + + // - Compute elapsed time in years + uint256 elaspedTimeSUD = SUD.fromInt( + endTimestamp - beginTimestamp, + decimals + ); + uint256 elapsedYearsSUD = (elaspedTimeSUD * + SUD.fromInt(1, decimals)) / SUD.fromInt(365 days, decimals); + + // - Obtain applied APR from above values + uint256 appliedAPRSUD = (growthSUD * SUD.fromInt(1, decimals)) / + elapsedYearsSUD; + uint256 appliedAPRUD7x3 = SUD.toRate(appliedAPRSUD, decimals); + + // Compute difference between given and applied APRs + uint256 difference = aprUD7x3 - appliedAPRUD7x3; + + // Ensure difference is in an acceptable range + // Note: As lower decimals number incur higher precision loss on short investment + // periods with low invested amounts or APRs, the acceptable range is higher for + // lower decimals number + if (decimals == 0) + assertLe(difference, 10000); // 10% + else if (decimals == 1) + assertLe(difference, 1000); // 1% + else if (decimals == 2) + assertLe(difference, 100); // 0.1% + else assertLe(difference, 10); // 0.01% + } + + function testFuzz__calculatePeriodRewards_4( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint40 beginTimestamp, + uint40 endTimestamp + ) public { + console.log( + "Should, no matter the precision loss, never apply a given period greater than the real one" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp + vm.assume(beginTimestamp < endTimestamp); + + // Get rewards + uint256 rewards = tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + // Assert that rewards are greater than 0 (prevent division by 0) + vm.assume(rewards > 0); + + // Compute applied elapsed time from rewards, APR and invested amount + // - Convert rewards, investedAmount and APR to SUD + uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); + uint256 investedAmountSUD = SUD.fromAmount( + investedAmount, + decimals + ); + uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); + + // - Compute growth of investedAmount after rewards + uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / + investedAmountSUD; + + // - Obtain applied elapsed time from above values + uint256 appliedElapsedYearSUD = (growthSUD * + SUD.fromInt(1, decimals)) / aprSUD; + uint256 appliedElapsedTimeSUD = (appliedElapsedYearSUD * + SUD.fromInt(365 days, decimals)) / SUD.fromInt(1, decimals); + uint256 appliedElapsedTime = SUD.toInt( + appliedElapsedTimeSUD, + decimals + ); + + // Ensure applied elapsed time is not greater than real one + assertLe(appliedElapsedTime, endTimestamp - beginTimestamp); + } + + function testFuzz__calculatePeriodRewards_5( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint40 beginTimestamp, + uint40 endTimestamp + ) public { + console.log("Should properly apply the given period"); + + // Bound decimals to [3, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Ensure APR is greater than 1% + aprUD7x3 = uint16(bound(aprUD7x3, 1 * 10 ** 3, type(uint16).max)); + + // Ensure invested amount is greater than 1000 units and caped to 100T + investedAmount = bound( + investedAmount, + 1000 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp and is forward of at least 10 days + vm.assume(beginTimestamp < type(uint40).max - 100 days); + endTimestamp = uint40( + bound(endTimestamp, beginTimestamp + 10 days, type(uint40).max) + ); + + // Get rewards + uint256 rewards = tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + // Assert that rewards are greater than 0 (prevent division by 0) + vm.assume(rewards > 0); + + // Compute applied elapsed time from rewards, APR and invested amount + // - Convert rewards, investedAmount and APR to SUD + uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); + uint256 investedAmountSUD = SUD.fromAmount( + investedAmount, + decimals + ); + uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); + + // - Compute growth of investedAmount after rewards + uint256 growthSUD = (rewardsSUD * SUD.fromInt(100, decimals)) / + investedAmountSUD; + + // - Obtain applied elapsed time from above values + uint256 appliedElapsedYearSUD = (growthSUD * + SUD.fromInt(1, decimals)) / aprSUD; + uint256 appliedElapsedTimeSUD = (appliedElapsedYearSUD * + SUD.fromInt(365 days, decimals)) / SUD.fromInt(1, decimals); + uint256 appliedElapsedTime = SUD.toInt( + appliedElapsedTimeSUD, + decimals + ); + + // Compute difference between given and applied elapsed times + uint256 givenElapsedTime = endTimestamp - beginTimestamp; + uint256 difference = givenElapsedTime - appliedElapsedTime; + + // Ensure that difference is less than 1 day + + // Ensure difference is in an acceptable range + // Note: As lower decimals number incur higher precision loss on short investment + // periods with low invested amounts or APRs, the acceptable range is higher for + // lower decimals number + if (decimals == 0) assertLe(difference, 40 days); + else if (decimals == 1) assertLe(difference, 4 days); + else if (decimals == 2) assertLe(difference, 1 days); + else assertLe(difference, 1 days); + } + + function testFuzz__calculatePeriodRewards_6( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint40 beginTimestamp, + uint40 endTimestamp + ) public { + console.log( + "Should, no matter the precision loss, never apply an invested amount greater than the real one" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp + vm.assume(beginTimestamp < endTimestamp); + + // Get rewards + uint256 rewards = tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + // Assert that rewards are greater than 0 (prevent division by 0) + vm.assume(rewards > 0); + + // Compute applied invested amount from rewards, APR and elapsed time + // - Convert rewards, APR to SUD + uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); + uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); + + // - Compute elasped time in years + uint256 elaspedTimeSUD = SUD.fromInt( + endTimestamp - beginTimestamp, + decimals + ); + uint256 elapsedYearsSUD = (elaspedTimeSUD * + SUD.fromInt(1, decimals)) / SUD.fromInt(365 days, decimals); + + // - Compute growth of investedAmount after rewards + uint256 growthSUD = (elapsedYearsSUD * aprSUD) / + SUD.fromInt(1, decimals); + + // - Obtain applied invested amount from above values + uint256 appliedInvestedAmountSUD = (rewardsSUD * + SUD.fromInt(100, decimals)) / growthSUD; + uint256 appliedInvestedAmount = SUD.toAmount( + appliedInvestedAmountSUD, + decimals + ); + + // Ensure applied invested amount is not greater than real one + assertLe(appliedInvestedAmount, investedAmount); + } + + function testFuzz__calculatePeriodRewards_7( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint40 beginTimestamp, + uint40 endTimestamp + ) public { + console.log("Should properly apply an invested amount"); + + // Bound decimals to [3, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Ensure APR is greater than 1% + aprUD7x3 = uint16(bound(aprUD7x3, 1 * 10 ** 3, type(uint16).max)); + + // Ensure invested amount is greater than 1000 units and caped to 100T + investedAmount = bound( + investedAmount, + 1000 * 10 ** decimals, + 100_000_000_000_000 * 10 ** decimals + ); + + // Ensure beginTimestamp is before endTimestamp and is forward of at least 10 days + vm.assume(beginTimestamp < type(uint40).max - 10 days); + endTimestamp = uint40( + bound(endTimestamp, beginTimestamp + 10 days, type(uint40).max) + ); + + // Get rewards + uint256 rewards = tested.public_calculatePeriodRewards( + beginTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + // Assert that rewards are greater than 0 (prevent division by 0) + vm.assume(rewards > 0); + + // Compute applied invested amount from rewards, APR and elapsed time + // - Convert rewards, APR to SUD + uint256 aprSUD = SUD.fromRate(aprUD7x3, decimals); + uint256 rewardsSUD = SUD.fromAmount(rewards, decimals); + + // - Compute elasped time in years + uint256 elaspedTimeSUD = SUD.fromInt( + endTimestamp - beginTimestamp, + decimals + ); + uint256 elapsedYearsSUD = (elaspedTimeSUD * + SUD.fromInt(1, decimals)) / SUD.fromInt(365 days, decimals); + + // - Compute growth of investedAmount after rewards + uint256 growthSUD = (elapsedYearsSUD * aprSUD) / + SUD.fromInt(1, decimals); + + // - Obtain applied invested amount from above values + uint256 appliedInvestedAmountSUD = (rewardsSUD * + SUD.fromInt(100, decimals)) / growthSUD; + uint256 appliedInvestedAmount = SUD.toAmount( + appliedInvestedAmountSUD, + decimals + ); + + // Compute difference between given and applied invested amounts + uint256 difference = investedAmount - appliedInvestedAmount; + + // Ensure difference is in an acceptable range + // Note: As lower decimals number incur higher precision loss on short investment + // periods with low invested amounts or APRs, the acceptable range is higher for + // lower decimals number + if (decimals == 0) + assertLe(difference, 4000 * 10 ** decimals); // 4000 units + else if (decimals == 1) + assertLe(difference, 400 * 10 ** decimals); // 400 units + else if (decimals == 2) + assertLe(difference, 40 * 10 ** decimals); // 40 units + else assertLe(difference, 4 * 10 ** decimals); // 4 units + } + + // ==================================== + // === _deepInvestmentOf() function === + function testFuzz__deepInvestmentOf_1(address account) public { + console.log("Should return 0 when no investment"); + + assertEq(tested.public_deepInvestmentOf(account), 0); + } + + function testFuzz__deepInvestmentOf_2( + uint16 aprUD7x3, + address account1, + address account2, + address account3, + uint256 amount + ) public { + console.log( + "Should return investment of account only if no other account redirect its rewards to to it" + ); + + // Ensure 3 accounts are different + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + + // Cap amount to 100T + amount = bound( + amount, + 0, + 100_000_000_000_000 * 10 ** investedToken.decimals() + ); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Make the three accounts investing + vm.prank(account1); + tested.stake(amount + 1); + vm.prank(account2); + tested.stake(amount + 2); + vm.prank(account3); + tested.stake(amount + 3); + + // Assert that deep investment of account1 is equal to its investment + assertEq(tested.public_deepInvestmentOf(account1), amount + 1); + + // Assert that deep investment of account2 is equal to its investment + assertEq(tested.public_deepInvestmentOf(account2), amount + 2); + + // Assert that deep investment of account3 is equal to its investment + assertEq(tested.public_deepInvestmentOf(account3), amount + 3); + } + + function testFuzz__deepInvestmentOf_3( + uint16 aprUD7x3, + address account1, + address account2, + address account3, + uint256 amount + ) public { + console.log( + "Should return sum of account investment plus one of all other accounts that redirects to it" + ); + + // Ensure 3 accounts are different and not the zero address + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account3 != address(0)); + + // Cap amount to 100T + amount = bound( + amount, + 0, + 100_000_000_000_000 * 10 ** investedToken.decimals() + ); + + // Set first random APR + tested.setAPR(aprUD7x3); + + // Invest with account1 + vm.prank(account1); + tested.stake(amount + 1); + vm.prank(account2); + tested.stake(amount + 2); + vm.prank(account3); + tested.stake(amount + 3); + + // Assert that deep investment of account1 is equal to its investment + assertEq(tested.public_deepInvestmentOf(account1), amount + 1); + + // Redirect account2 rewards to account1 + tested.startRewardsRedirection(account2, account1); + + // Assert that deep investment of account1 is equal to its investment plus account2 investment + assertEq( + tested.public_deepInvestmentOf(account1), + amount + 1 + amount + 2 + ); + + // Redirect account3 rewards to account2 + tested.startRewardsRedirection(account3, account2); + + // Assert that deep investment of account1 is equal to its investment plus account2 investment plus account3 investment + assertEq( + tested.public_deepInvestmentOf(account1), + amount + 1 + amount + 2 + amount + 3 + ); + + // Stop redirect account2 rewards to account1 + tested.stopRewardsRedirection(account2, account1); + + // Assert that deep investment of account1 is equal to its investment plus account3 investment + assertEq(tested.public_deepInvestmentOf(account1), amount + 1); + + // Assert that deep investment of account2 is equal to its investment plus account3 investment + assertEq( + tested.public_deepInvestmentOf(account2), + amount + 2 + amount + 3 + ); + } + + // ============================= + // === _rewardsOf() function === + function testFuzz__rewardsOf_1( + uint8 decimals, + bool autocompound + ) public { + console.log("Should return 0 when not APR checkpoints"); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + assertEq(tested.public_rewardsOf(address(1234), autocompound), 0); + } + + function testFuzz__rewardsOf_2( + uint8 decimals, + uint16 aprUD7x3, + bool autocompound + ) public { + console.log( + "Should return 0 when APR checkpoints but no investment" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap APR to half its max value + aprUD7x3 = uint16(bound(aprUD7x3, 0, type(uint16).max / 2)); + + // Set first random APR value and ensure rewards of returns 0 + tested.setAPR(aprUD7x3); + assertEq(tested.public_rewardsOf(address(1234), autocompound), 0); + + // Set second random APR value and ensure rewards of returns 0 + tested.setAPR(aprUD7x3 * 2); + assertEq(tested.public_rewardsOf(address(1234), autocompound), 0); + } + + function testFuzz__rewardsOf_3( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint256 investmentDuration, + bool autocompound + ) public { + console.log( + "Should properly calculate rewards when no new APR checkpoint after investment" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Set random APR + tested.setAPR(aprUD7x3); + + // Invest random amount of tokens + vm.prank(address(1234)); + tested.stake(investedAmount); + + // Simulate investment period + uint40 startTimestamp = uint40(block.timestamp); + investmentDuration = bound( + investmentDuration, + 0, + type(uint40).max - startTimestamp + ); // prevent overflow + skip(investmentDuration); + uint40 endTimestamp = uint40(block.timestamp); + + // Calculate expected rewards + uint256 expectedRewards = tested.public_calculatePeriodRewards( + startTimestamp, + endTimestamp, + aprUD7x3, + investedAmount + ); + + assertEq( + tested.public_rewardsOf(address(1234), autocompound), + expectedRewards + ); + } + + function testFuzz__rewardsOf_4( + uint8 decimals, + uint16 aprUD7x3, + uint256 investedAmount, + uint256 numberOfCheckpoints, + bool autocompound, + uint40 investmentDuration + ) public { + console.log( + "Should properly calculate rewards when one or many checkpoints have been added after investment" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Cap interval between checkpoints to 365 days + investmentDuration = uint40( + bound(investmentDuration, 0, 365 days) + ); + + // Cap number of checkpoints to 200 + numberOfCheckpoints = bound(numberOfCheckpoints, 1, 100); + + // Create random number of checkpoints after investment + uint256 expectedRewards = 0; + uint40 latestCheckpointTimestamp = uint40(block.timestamp); + uint16 latestCheckpointApr = aprUD7x3; + + // Create first APR + tested.setAPR(latestCheckpointApr); + + // Invest random amount of tokens + vm.prank(address(1234)); + tested.stake(investedAmount); + + // Create random number of checkpoints after investment + for (uint256 i = 0; i < numberOfCheckpoints; i++) { + uint40 newCheckpointTimestamp = uint40(block.timestamp); + uint16 newCheckpointApr = aprUD7x3; + tested.setAPR(newCheckpointApr); + + // Move forward a random amount of time + skip(investmentDuration); + + // Calculate expected rewards for this past period + expectedRewards += tested.public_calculatePeriodRewards( + latestCheckpointTimestamp, + newCheckpointTimestamp, + latestCheckpointApr, + investedAmount + (autocompound ? expectedRewards : 0) + ); + + latestCheckpointTimestamp = newCheckpointTimestamp; + latestCheckpointApr = newCheckpointApr; + } + + // Calculate rewards from last checkpoint to now + expectedRewards += tested.public_calculatePeriodRewards( + latestCheckpointTimestamp, + uint40(block.timestamp), + latestCheckpointApr, + investedAmount + (autocompound ? expectedRewards : 0) + ); + + // Ensure calculated rewards are equal to expected rewards + uint256 rewards = tested.public_rewardsOf( + address(1234), + autocompound + ); + assertEq(rewards, expectedRewards); + } + + function testFuzz__rewardsOf_5( + uint8 decimals, + uint16 aprUD7x3, + address account1, + address account2, + address account3, + uint256 investedAmount, + uint256 numberOfCheckpoints, + bool autocompound, + uint40 investmentDuration + ) public { + console.log( + "Should properly calculate rewards when given account is the target of one or many rewards redirections" + ); + + // Ensure 3 accounts are different and not equal to zero address + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account3 != address(0)); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Cap interval between checkpoints to 365 days + investmentDuration = uint40( + bound(investmentDuration, 0, 365 days) + ); + + // Cap number of checkpoints to 200 + numberOfCheckpoints = bound(numberOfCheckpoints, 1, 100); + + // Create random number of checkpoints after investment + uint256 expectedRewards = 0; + uint40 latestCheckpointTimestamp = uint40(block.timestamp); + uint16 latestCheckpointApr = aprUD7x3; + + // Create first APR + tested.setAPR(latestCheckpointApr); + + // Invest random amount of tokens with 3 accounts + vm.prank(account1); + tested.stake(investedAmount + 1); + vm.prank(account2); + tested.stake(investedAmount + 2); + vm.prank(account3); + tested.stake(investedAmount + 3); + + // Redirect account2 rewards to account1 + tested.startRewardsRedirection(account2, account1); + + // Redirect account3 rewards to account2 + tested.startRewardsRedirection(account3, account2); + + // Consider that now account1 deposited amount is equal to account1 + account2 deposited amounts + uint256 depositedAmount = investedAmount + + 1 + + investedAmount + + 2 + + investedAmount + + 3; + + // Create random number of checkpoints after investment + for (uint256 i = 0; i < numberOfCheckpoints; i++) { + uint40 newCheckpointTimestamp = uint40(block.timestamp); + uint16 newCheckpointApr = aprUD7x3; + tested.setAPR(newCheckpointApr); + + // Move forward a random amount of time + skip(investmentDuration); + + // Calculate expected rewards for this past period + expectedRewards += tested.public_calculatePeriodRewards( + latestCheckpointTimestamp, + newCheckpointTimestamp, + latestCheckpointApr, + depositedAmount + (autocompound ? expectedRewards : 0) + ); + + latestCheckpointTimestamp = newCheckpointTimestamp; + latestCheckpointApr = newCheckpointApr; + } + + // Calculate rewards from last checkpoint to now + expectedRewards += tested.public_calculatePeriodRewards( + latestCheckpointTimestamp, + uint40(block.timestamp), + latestCheckpointApr, + depositedAmount + (autocompound ? expectedRewards : 0) + ); + + // Ensure calculated rewards are equal to expected rewards + uint256 rewards = tested.public_rewardsOf(account1, autocompound); + assertEq(rewards, expectedRewards); + } + + // =============================================== + // === _deepResetInvestmentPeriodOf() function === + function testFuzz__deepResetInvestmentPeriodOf_1( + uint16 aprUD7x3, + address account, + uint32 duration + ) public { + console.log("Should reset given account investment period"); + + // Set random APR + tested.setAPR(aprUD7x3); + + // Assert that current account investment period block timestamp is 0 + assertEq( + tested.public_accountsInfos(account).period.timestamp, + 0 + ); + + // Skip random amount of time to simulate investment period + skip(duration); + + // Call _deepResetInvestmentPeriodOf() + tested.public_deepResetInvestmentPeriodOf(account); + + // Assert that account investment period has been reset + assertEq( + tested.public_accountsInfos(account).period.timestamp, + block.timestamp + ); + } + + function testFuzz__deepResetInvestmentPeriodOf_2( + uint16 aprUD7x3, + address account1, + address account2, + address account3, + uint256 amount, + uint32 duration + ) public { + console.log( + "Should not reset account investment period (timestamp + apr) of accounts that aren't redirecting rewards to given account" + ); + + // Set random APR + tested.setAPR(aprUD7x3); + + // Assert that accounts are different + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + + // Cap amount to 100T + amount = bound( + amount, + 0, + 100_000_000_000_000 * 10 ** investedToken.decimals() + ); + + // Invest random amount of tokens with 3 accounts + // This will initialize their investment periods + vm.prank(account1); + tested.stake(amount + 1); + vm.prank(account2); + tested.stake(amount + 2); + vm.prank(account3); + tested.stake(amount + 3); + + // Assert that current accounts investment period is 1 (first block timestamp) + assertEq( + tested.public_accountsInfos(account1).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account2).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account3).period.timestamp, + 1 + ); + + // Skip random amount of time to simulate investment period + skip(duration); + + // Set new APR + uint16 newAPRUD7x3 = aprUD7x3 < type(uint16).max + ? aprUD7x3 + 1 + : aprUD7x3 - 1; + tested.setAPR(newAPRUD7x3); + + // Call _deepResetInvestmentPeriodOf() on account + tested.public_deepResetInvestmentPeriodOf(account1); + + // Assert that account investment period has been reset + assertEq( + tested.public_accountsInfos(account1).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account1).period.ref.cursorIndex, + 2 + ); + + // Assert that other accounts investment period haven't been reset + assertEq( + tested.public_accountsInfos(account2).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account2).period.ref.cursorIndex, + 1 + ); + + assertEq( + tested.public_accountsInfos(account3).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account3).period.ref.cursorIndex, + 1 + ); + } + + function testFuzz__deepResetInvestmentPeriodOf_3( + uint16 aprUD7x3, + address account1, + address account2, + address account3, + uint256 amount, + uint32 duration + ) public { + console.log( + "Should reset account investment period (timestamp + apr) of accounts that are redirecting rewards to given account" + ); + + // Set random APR + tested.setAPR(aprUD7x3); + + // Assert that accounts are different and not zero addresses + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account3 != address(0)); + + // Cap amount to 100T + amount = bound( + amount, + 0, + 100_000_000_000_000 * 10 ** investedToken.decimals() + ); + + // Invest random amount of tokens with 3 accounts + // This will initialize their investment periods + vm.prank(account1); + tested.stake(amount + 1); + vm.prank(account2); + tested.stake(amount + 2); + vm.prank(account3); + tested.stake(amount + 3); + + // Redirect account2 rewards to account1 + tested.startRewardsRedirection(account2, account1); + + // Redirect account3 rewards to account2 + tested.startRewardsRedirection(account3, account2); + + // Assert that current accounts investment period is 1 (first block timestamp) + assertEq( + tested.public_accountsInfos(account1).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account2).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account3).period.timestamp, + 1 + ); + + // Skip random amount of time to simulate investment period + duration = uint32(bound(duration, 1, type(uint32).max)); + skip(duration); + + // Set new APR + uint16 newAPRUD7x3 = aprUD7x3 < type(uint16).max + ? aprUD7x3 + 1 + : aprUD7x3 - 1; + tested.setAPR(newAPRUD7x3); + + // Call _deepResetInvestmentPeriodOf() on account + tested.public_deepResetInvestmentPeriodOf(account1); + + // Assert that account investment period has been reset + assertEq( + tested.public_accountsInfos(account1).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account1).period.ref.cursorIndex, + 2 + ); + + // Assert that other accounts investment period have been reset + assertEq( + tested.public_accountsInfos(account2).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account2).period.ref.cursorIndex, + 2 + ); + + assertEq( + tested.public_accountsInfos(account3).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account3).period.ref.cursorIndex, + 2 + ); + } + + // =========================================== + // === _beforeInvestmentChange() function === + function test__beforeInvestmentChange_1( + uint8 decimals, + uint256 investedAmount, + uint16 aprUD7x3, + uint40 investmentDuration, + bool autocompound + ) public { + console.log( + "Should call claim rewards once / no infinite re-entrancy if _distributeRewards() itself indirectly or directly calls _beforeInvestmentChange()" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Cap interval between checkpoints to 100 years + investmentDuration = uint40( + bound(investmentDuration, 0, 100 * 365 days) + ); + + // Implements _distributeRewards() and make it call _beforeInvestmentChange() again + tested.set_distributeRewards_Implemented(true); + tested.set_distributeRewards_ResetInvestmentPeriod(true); + + // Simulate investment period + tested.setAPR(aprUD7x3); + vm.prank(address(1234)); + tested.stake(investedAmount); + skip(investmentDuration); + + // Call _beforeInvestmentChange() + tested.public_beforeInvestmentChange(address(1234), autocompound); + + // Check that _distributeRewards() has been called once + // Note that we use "lower than equal" as the _distributeRewards() function may not be + // called at all if rewards are equal to 0 + assertLe(tested._distributeRewards_CallsCount(), 1); + } + + function test__beforeInvestmentChange_2( + uint8 decimals, + uint256 investedAmount, + uint16 aprUD7x3, + uint40 investmentDuration, + bool autocompound, + bool isImplemented + ) public { + console.log( + "Should rely on _distributeRewards() to distribute rewards if implemented (= returns true) else on virtual balance" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Cap interval between checkpoints to 100 years + investmentDuration = uint40( + bound(investmentDuration, 0, 100 * 365 days) + ); + + // Randomly implement _distributeRewards() + tested.set_distributeRewards_Implemented(isImplemented); + + // Simulate investment period + tested.setAPR(aprUD7x3); + vm.prank(address(1234)); + tested.stake(investedAmount); + skip(investmentDuration); + + // Store expected rewards and old staked and virtual balances + uint256 expectedRewards = tested.public_rewardsOf( + address(1234), + autocompound + ); + uint256 oldStakedBalance = tested.stakeOf(address(1234)); + uint256 oldVirtualBalance = tested + .public_accountsInfos(address(1234)) + .virtualBalance; + + // Call _beforeInvestmentChange() + tested.public_beforeInvestmentChange(address(1234), autocompound); + + // If _distributeRewards() is implemented + if (isImplemented) { + // Ensure that is has been called + assertLe(tested._distributeRewards_CallsCount(), 1); + + // Ensure that it has properly minted rewards + uint256 newStakedBalance = tested.stakeOf(address(1234)); + assertEq(newStakedBalance, oldStakedBalance + expectedRewards); + + // Ensure that the virtual balance ends on 0 + uint256 newVirtualBalance = tested + .public_accountsInfos(address(1234)) + .virtualBalance; + assertEq(newVirtualBalance, 0); + } + // If it isn't + else { + // Ensure that it hasn't been called + assertEq(tested._distributeRewards_CallsCount(), 0); + + // Ensure that rewards have been properly accumulated in virtual balance + uint256 newVirtualBalance = tested + .public_accountsInfos(address(1234)) + .virtualBalance; + assertEq( + newVirtualBalance, + oldVirtualBalance + expectedRewards + ); + } + } + + function test__beforeInvestmentChange_3( + uint8 decimals, + address account1, + address account2, + address account3, + uint256 investedAmount, + uint16 aprUD7x3, + uint32 duration, + bool autocompound, + bool isImplemented + ) public { + console.log( + "Should distribute rewards to account at the very end of the redirection chain" + ); + // Set random APR + tested.setAPR(aprUD7x3); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Randomly implement _distributeRewards() + tested.set_distributeRewards_Implemented(isImplemented); + + // Assert that accounts are different and not zero addresses + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account3 != address(0)); + + // Cap investedAmount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Invest random amount of tokens with 3 accounts + // This will initialize their investment periods + vm.prank(account1); + tested.stake(investedAmount + 1); + vm.prank(account2); + tested.stake(investedAmount + 2); + vm.prank(account3); + tested.stake(investedAmount + 3); + + // Redirect account2 rewards to account1 + tested.startRewardsRedirection(account2, account1); + + // Redirect account3 rewards to account2 + tested.startRewardsRedirection(account3, account2); + + // Assert that current accounts stakes are equal to invested amount + assertEq(tested.stakeOf(account1), investedAmount + 1); + assertEq(tested.stakeOf(account2), investedAmount + 2); + assertEq(tested.stakeOf(account3), investedAmount + 3); + + // Assert that all accounts virtual balances are empty + assertEq(tested.public_accountsInfos(account1).virtualBalance, 0); + assertEq(tested.public_accountsInfos(account2).virtualBalance, 0); + assertEq(tested.public_accountsInfos(account3).virtualBalance, 0); + + // Skip random amount of time to simulate investment period + duration = uint32(bound(duration, 1, type(uint32).max)); + skip(duration); + + // Compute account 1 rewards + uint256 account1Rewards = tested.public_rewardsOf( + account1, + autocompound + ); + + // Call _beforeInvestmentChange() + tested.public_beforeInvestmentChange(account1, autocompound); + + // Assert that account2 and account3 stakes and virtual balances haven't changed (they received not rewards) + assertEq(tested.stakeOf(account2), investedAmount + 2); + assertEq(tested.stakeOf(account3), investedAmount + 3); + assertEq(tested.public_accountsInfos(account2).virtualBalance, 0); + assertEq(tested.public_accountsInfos(account3).virtualBalance, 0); + + // Assert that account1 has received rewards + // If distribute rewards is implemented assert that rewards have been compounded to stake + if (isImplemented) { + assertEq( + tested.stakeOf(account1), + investedAmount + 1 + account1Rewards + ); + } + // Else assert that rewards have been accumulated in virtual balance + else { + assertEq( + tested.public_accountsInfos(account1).virtualBalance, + account1Rewards + ); + } + } + + function test__beforeInvestmentChange_4( + uint8 decimals, + uint256 investedAmount, + uint16 aprUD7x3, + uint40 investmentDuration, + bool autocompound, + bool isImplemented + ) public { + console.log( + "Should reset investment period timestamp of given account to now" + ); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Cap invested amount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Cap interval between checkpoints to 100 years + investmentDuration = uint40( + bound(investmentDuration, 0, 100 * 365 days) + ); + + // Randomly implement _distributeRewards() + tested.set_distributeRewards_Implemented(isImplemented); + + // Simulate investment period + tested.setAPR(aprUD7x3); + vm.prank(address(1234)); + tested.stake(investedAmount); + skip(investmentDuration); + + // Call _beforeInvestmentChange() + tested.public_beforeInvestmentChange(address(1234), autocompound); + + // Ensure that the investment period timestamp has been updated to now + assertEq( + tested.public_accountsInfos(address(1234)).period.timestamp, + block.timestamp + ); + } + + function test__beforeInvestmentChange_5( + uint8 decimals, + address account1, + address account2, + address account3, + uint256 investedAmount, + uint16 aprUD7x3, + uint32 duration, + bool autocompound, + bool isImplemented + ) public { + console.log( + "Should reset investment period timestamp of all accounts that directly or indirectly redirect rewards to given accounts" + ); + // Set random APR + tested.setAPR(aprUD7x3); + + // Bound decimals to [0, 18] and set random invested token decimals + decimals = uint8(bound(decimals, 0, 18)); + investedToken.setDecimals(decimals); + + // Randomly implement _distributeRewards() + tested.set_distributeRewards_Implemented(isImplemented); + + // Assert that accounts are different and not zero addresses + vm.assume(account1 != account2); + vm.assume(account1 != account3); + vm.assume(account2 != account3); + vm.assume(account1 != address(0)); + vm.assume(account2 != address(0)); + vm.assume(account3 != address(0)); + + // Cap investedAmount to 100T + investedAmount = bound( + investedAmount, + 0, + 100_000_000_000_000 * 10 ** decimals + ); + + // Invest random amount of tokens with 3 accounts + // This will initialize their investment periods + vm.prank(account1); + tested.stake(investedAmount + 1); + vm.prank(account2); + tested.stake(investedAmount + 2); + vm.prank(account3); + tested.stake(investedAmount + 3); + + // Redirect account2 rewards to account1 + tested.startRewardsRedirection(account2, account1); + + // Redirect account3 rewards to account2 + tested.startRewardsRedirection(account3, account2); + + // Assert that current accounts investment period is 1 (first block timestamp) + assertEq( + tested.public_accountsInfos(account1).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account2).period.timestamp, + 1 + ); + assertEq( + tested.public_accountsInfos(account3).period.timestamp, + 1 + ); + + // Skip random amount of time to simulate investment period + duration = uint32(bound(duration, 1, type(uint32).max)); + skip(duration); + + // Set new APR + uint16 newAPRUD7x3 = aprUD7x3 < type(uint16).max + ? aprUD7x3 + 1 + : aprUD7x3 - 1; + tested.setAPR(newAPRUD7x3); + + // Call _beforeInvestmentChange() + tested.public_beforeInvestmentChange(account1, autocompound); + + // Assert that account investment period has been reset + assertEq( + tested.public_accountsInfos(account1).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account1).period.ref.cursorIndex, + 2 + ); + + // Assert that other accounts investment period have been reset + assertEq( + tested.public_accountsInfos(account2).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account2).period.ref.cursorIndex, + 2 + ); + + assertEq( + tested.public_accountsInfos(account3).period.timestamp, + block.timestamp + ); + assertEq( + tested.public_accountsInfos(account3).period.ref.cursorIndex, + 2 + ); + } } diff --git a/contracts/foundry/test/abstracts/RecoverableUpgradeable.t.sol b/contracts/foundry/test/abstracts/RecoverableUpgradeable.t.sol index 294f67b6..7763bd95 100644 --- a/contracts/foundry/test/abstracts/RecoverableUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/RecoverableUpgradeable.t.sol @@ -2,124 +2,145 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../_helpers/ModifiersExpectations.sol"; - -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {RecoverableUpgradeable} from "../../../src/abstracts/RecoverableUpgradeable.sol"; -import {GlobalOwner} from "../../../src/GlobalOwner.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import {GenericERC20} from "../../../src/GenericERC20.sol"; - -contract TestedContract is Initializable, UUPSUpgradeable, RecoverableUpgradeable { - constructor() { - _disableInitializers(); - } - - function initialize(address globalOwner_) public initializer { - __UUPSUpgradeable_init(); - __Recoverable_init(globalOwner_); - } - - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} +import { ModifiersExpectations } from "../_helpers/ModifiersExpectations.sol"; + +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { RecoverableUpgradeable } from "../../../src/abstracts/RecoverableUpgradeable.sol"; +import { GlobalOwner } from "../../../src/GlobalOwner.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { GenericERC20 } from "../../../src/GenericERC20.sol"; + +contract TestedContract is + Initializable, + UUPSUpgradeable, + RecoverableUpgradeable +{ + constructor() { + _disableInitializers(); + } + + function initialize(address globalOwner_) public initializer { + __UUPSUpgradeable_init(); + __Recoverable_init(globalOwner_); + } + + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GenericERC20 recoveredToken; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy tested contract - TestedContract impl2 = new TestedContract(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - tested = TestedContract(address(proxy2)); - tested.initialize(address(globalOwner)); - vm.label(address(tested), "TestedContract"); - - // Deploy GenericERC20 - recoveredToken = new GenericERC20("Dummy Token", "DUMMY", 18); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Should properly set global owner"); - assertEq(tested.globalOwner(), address(globalOwner)); - } - - // =============================== - // === recoverERC20() function === - function test_recoverERC20_1( - address account, - address tokenAddress, - uint256 recoveredAmount - ) public { - console.log("Should revert if not called by owner"); - - // Ensure the random account is not the fund wallet - vm.assume(account != tested.owner()); - - // Expect revert - expectRevertOnlyOwner(); - vm.prank(account); - tested.recoverERC20(tokenAddress, recoveredAmount); - } - - function test_recoverERC20_2() public { - console.log("Should revert if call requests to recover 0 tokens"); - - vm.expectRevert(bytes("L10")); - tested.recoverERC20(address(recoveredToken), 0); - } - - function test_recoverERC20_3() public { - console.log("Should revert if given address is not an ERC20 contract"); - - vm.expectRevert(); - tested.recoverERC20(address(1234), 0); - } - - function test_recoverERC20_4() public { - console.log("Should revert if there is 0 token to recover"); - - vm.expectRevert(bytes("L11")); - tested.recoverERC20(address(recoveredToken), 9999); - } - - function test_recoverERC20_5() public { - console.log("Should revert if there is not enough token to recover"); - - // Mint only 1000 tokens to recoverable contract - deal(address(recoveredToken), address(tested), 1000, true); - - vm.expectRevert(bytes("L11")); - tested.recoverERC20(address(recoveredToken), 9999); - } - - function test_recoverERC20_6(uint256 recoverableAmount, uint256 recoveredAmount) public { - console.log("Should successfully recover tokens else"); - - // Ensure recovered and recoverable is greater than 0 - vm.assume(recoverableAmount > 0); - - // Ensure recovered amount is lower than or equal recoverable amount - recoveredAmount = bound(recoveredAmount, 1, recoverableAmount); - - // Mint only random number of tokens to recoverable contract - deal(address(recoveredToken), address(tested), recoverableAmount, true); - - // Recover random amount of tokens - tested.recoverERC20(address(recoveredToken), recoveredAmount); - - // Check that recovered amount is now in owner balance - assertEq(recoveredToken.balanceOf(address(this)), recoveredAmount); - } + TestedContract tested; + GlobalOwner globalOwner; + GenericERC20 recoveredToken; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy tested contract + TestedContract impl2 = new TestedContract(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + tested = TestedContract(address(proxy2)); + tested.initialize(address(globalOwner)); + vm.label(address(tested), "TestedContract"); + + // Deploy GenericERC20 + recoveredToken = new GenericERC20("Dummy Token", "DUMMY", 18); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Should properly set global owner"); + assertEq(tested.globalOwner(), address(globalOwner)); + } + + // =============================== + // === recoverERC20() function === + function test_recoverERC20_1( + address account, + address tokenAddress, + uint256 recoveredAmount + ) public { + console.log("Should revert if not called by owner"); + + // Ensure the random account is not the fund wallet + vm.assume(account != tested.owner()); + + // Expect revert + expectRevertOnlyOwner(); + vm.prank(account); + tested.recoverERC20(tokenAddress, recoveredAmount); + } + + function test_recoverERC20_2() public { + console.log("Should revert if call requests to recover 0 tokens"); + + vm.expectRevert(bytes("L10")); + tested.recoverERC20(address(recoveredToken), 0); + } + + function test_recoverERC20_3() public { + console.log( + "Should revert if given address is not an ERC20 contract" + ); + + vm.expectRevert(); + tested.recoverERC20(address(1234), 0); + } + + function test_recoverERC20_4() public { + console.log("Should revert if there is 0 token to recover"); + + vm.expectRevert(bytes("L11")); + tested.recoverERC20(address(recoveredToken), 9999); + } + + function test_recoverERC20_5() public { + console.log( + "Should revert if there is not enough token to recover" + ); + + // Mint only 1000 tokens to recoverable contract + deal(address(recoveredToken), address(tested), 1000, true); + + vm.expectRevert(bytes("L11")); + tested.recoverERC20(address(recoveredToken), 9999); + } + + function test_recoverERC20_6( + uint256 recoverableAmount, + uint256 recoveredAmount + ) public { + console.log("Should successfully recover tokens else"); + + // Ensure recovered and recoverable is greater than 0 + vm.assume(recoverableAmount > 0); + + // Ensure recovered amount is lower than or equal recoverable amount + recoveredAmount = bound(recoveredAmount, 1, recoverableAmount); + + // Mint only random number of tokens to recoverable contract + deal( + address(recoveredToken), + address(tested), + recoverableAmount, + true + ); + + // Recover random amount of tokens + tested.recoverERC20(address(recoveredToken), recoveredAmount); + + // Check that recovered amount is now in owner balance + assertEq( + recoveredToken.balanceOf(address(this)), + recoveredAmount + ); + } } diff --git a/contracts/foundry/test/abstracts/base/BaseUpgradeable.t.sol b/contracts/foundry/test/abstracts/base/BaseUpgradeable.t.sol index f5ab4d5d..e4fed496 100644 --- a/contracts/foundry/test/abstracts/base/BaseUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/base/BaseUpgradeable.t.sol @@ -2,106 +2,118 @@ pragma solidity ^0.8.18; import "../../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../../_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "../../_helpers/ModifiersExpectations.sol"; -import {BaseUpgradeable} from "../../../../src/abstracts/base/BaseUpgradeable.sol"; -import {GlobalOwner} from "../../../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../../../src/GlobalPause.sol"; -import {GlobalBlacklist} from "../../../../src/GlobalBlacklist.sol"; +import { BaseUpgradeable } from "../../../../src/abstracts/base/BaseUpgradeable.sol"; +import { GlobalOwner } from "../../../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../../../src/GlobalPause.sol"; +import { GlobalBlacklist } from "../../../../src/GlobalBlacklist.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract TestedContract is BaseUpgradeable { - function initialize( - address globalOwner_, - address globalPause_, - address globalBlacklist_ - ) public initializer { - __Base_init(globalOwner_, globalPause_, globalBlacklist_); - } - - function public_authorizeUpgrade(address newImplementation) public { - _authorizeUpgrade(newImplementation); - } - - function public___Base_init_unchained() public { - __Base_init_unchained(); - } + function initialize( + address globalOwner_, + address globalPause_, + address globalBlacklist_ + ) public initializer { + __Base_init(globalOwner_, globalPause_, globalBlacklist_); + } + + function public_authorizeUpgrade(address newImplementation) public { + _authorizeUpgrade(newImplementation); + } + + function public___Base_init_unchained() public { + __Base_init_unchained(); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GlobalPause globalPause; - GlobalBlacklist globalBlacklist; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - GlobalPause impl2 = new GlobalPause(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - globalPause = GlobalPause(address(proxy2)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - // Deploy tested contract - TestedContract impl4 = new TestedContract(); - ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); - tested = TestedContract(address(proxy4)); - tested.initialize(address(globalOwner), address(globalPause), address(globalBlacklist)); - vm.label(address(tested), "TestedContract"); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Shouldn't be re-initializable"); - vm.expectRevert(bytes("Initializable: contract is already initialized")); - tested.initialize(address(globalOwner), address(globalPause), address(globalBlacklist)); - } - - function test_initialize_2() public { - console.log("Should properly set global owner"); - assertEq(tested.globalOwner(), address(globalOwner)); - } - - function test_initialize_3() public { - console.log("Should properly set global pause"); - assertEq(tested.globalPause(), address(globalPause)); - } - - function test_initialize_4() public { - console.log("Should properly set global blacklist"); - assertEq(tested.globalBlacklist(), address(globalBlacklist)); - } - - // ==================================== - // === _authorizeUpgrade() function === - function test_authorizeUpgrade_1() public { - console.log("Should revert if called by non-owner account"); - vm.prank(address(1234)); - expectRevertOnlyOwner(); - tested.public_authorizeUpgrade(address(0)); - } - - // ======================================== - // === __Base_init_unchained() function === - function test___Base_init_unchained_1() public { - console.log("Should revert if called by after initialization"); - vm.expectRevert(bytes("Initializable: contract is not initializing")); - tested.public___Base_init_unchained(); - } + TestedContract tested; + GlobalOwner globalOwner; + GlobalPause globalPause; + GlobalBlacklist globalBlacklist; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + GlobalPause impl2 = new GlobalPause(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + globalPause = GlobalPause(address(proxy2)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + // Deploy tested contract + TestedContract impl4 = new TestedContract(); + ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); + tested = TestedContract(address(proxy4)); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist) + ); + vm.label(address(tested), "TestedContract"); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Shouldn't be re-initializable"); + vm.expectRevert( + bytes("Initializable: contract is already initialized") + ); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist) + ); + } + + function test_initialize_2() public { + console.log("Should properly set global owner"); + assertEq(tested.globalOwner(), address(globalOwner)); + } + + function test_initialize_3() public { + console.log("Should properly set global pause"); + assertEq(tested.globalPause(), address(globalPause)); + } + + function test_initialize_4() public { + console.log("Should properly set global blacklist"); + assertEq(tested.globalBlacklist(), address(globalBlacklist)); + } + + // ==================================== + // === _authorizeUpgrade() function === + function test_authorizeUpgrade_1() public { + console.log("Should revert if called by non-owner account"); + vm.prank(address(1234)); + expectRevertOnlyOwner(); + tested.public_authorizeUpgrade(address(0)); + } + + // ======================================== + // === __Base_init_unchained() function === + function test___Base_init_unchained_1() public { + console.log("Should revert if called by after initialization"); + vm.expectRevert( + bytes("Initializable: contract is not initializing") + ); + tested.public___Base_init_unchained(); + } } diff --git a/contracts/foundry/test/abstracts/base/ERC20BaseUpgradeable.t.sol b/contracts/foundry/test/abstracts/base/ERC20BaseUpgradeable.t.sol index fcf44a43..b054a353 100644 --- a/contracts/foundry/test/abstracts/base/ERC20BaseUpgradeable.t.sol +++ b/contracts/foundry/test/abstracts/base/ERC20BaseUpgradeable.t.sol @@ -2,164 +2,186 @@ pragma solidity ^0.8.18; import "../../../lib/forge-std/src/Test.sol"; -import {ModifiersExpectations} from "../../_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "../../_helpers/ModifiersExpectations.sol"; -import {ERC20BaseUpgradeable} from "../../../../src/abstracts/base/ERC20BaseUpgradeable.sol"; -import {GlobalOwner} from "../../../../src/GlobalOwner.sol"; -import {GlobalPause} from "../../../../src/GlobalPause.sol"; -import {GlobalBlacklist} from "../../../../src/GlobalBlacklist.sol"; +import { ERC20BaseUpgradeable } from "../../../../src/abstracts/base/ERC20BaseUpgradeable.sol"; +import { GlobalOwner } from "../../../../src/GlobalOwner.sol"; +import { GlobalPause } from "../../../../src/GlobalPause.sol"; +import { GlobalBlacklist } from "../../../../src/GlobalBlacklist.sol"; -import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract TestedContract is ERC20BaseUpgradeable { - function initialize( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - string memory name_, - string memory symbol_ - ) public initializer { - __ERC20Base_init(globalOwner_, globalPause_, globalBlacklist_, name_, symbol_); - } - - /** - * @dev Public version of _beforeTokenTransfer() used in tests - */ - function public_beforeTokenTransfer(address from, address to, uint256 amount) public { - _beforeTokenTransfer(from, to, amount); - } - - function public___ERC20Base_init_unchained() public { - __ERC20Base_init_unchained(); - } + function initialize( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + string memory name_, + string memory symbol_ + ) public initializer { + __ERC20Base_init( + globalOwner_, + globalPause_, + globalBlacklist_, + name_, + symbol_ + ); + } + + /** + * @dev Public version of _beforeTokenTransfer() used in tests + */ + function public_beforeTokenTransfer( + address from, + address to, + uint256 amount + ) public { + _beforeTokenTransfer(from, to, amount); + } + + function public___ERC20Base_init_unchained() public { + __ERC20Base_init_unchained(); + } } contract Tests is Test, ModifiersExpectations { - TestedContract tested; - GlobalOwner globalOwner; - GlobalPause globalPause; - GlobalBlacklist globalBlacklist; - string nameAtInitTime = "Dummy Token"; - string symbolAtInitTime = "DUMMY"; - - function setUp() public { - // Deploy GlobalOwner - GlobalOwner impl = new GlobalOwner(); - ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); - globalOwner = GlobalOwner(address(proxy)); - globalOwner.initialize(); - vm.label(address(globalOwner), "GlobalOwner"); - - // Deploy GlobalPause - GlobalPause impl2 = new GlobalPause(); - ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); - globalPause = GlobalPause(address(proxy2)); - globalPause.initialize(address(globalOwner)); - vm.label(address(globalPause), "GlobalPause"); - - // Deploy GlobalBlacklist - GlobalBlacklist impl3 = new GlobalBlacklist(); - ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); - globalBlacklist = GlobalBlacklist(address(proxy3)); - globalBlacklist.initialize(address(globalOwner)); - vm.label(address(globalBlacklist), "GlobalBlacklist"); - - // Deploy tested contract - TestedContract impl4 = new TestedContract(); - ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); - tested = TestedContract(address(proxy4)); - tested.initialize( - address(globalOwner), - address(globalPause), - address(globalBlacklist), - nameAtInitTime, - symbolAtInitTime - ); - vm.label(address(tested), "TestedContract"); - } - - // ============================= - // === initialize() function === - function test_initialize_1() public { - console.log("Should properly set global owner"); - assertEq(tested.globalOwner(), address(globalOwner)); - } - - function test_initialize_2() public { - console.log("Should properly set global pause"); - assertEq(tested.globalPause(), address(globalPause)); - } - - function test_initialize_3() public { - console.log("Should properly set global blacklist"); - assertEq(tested.globalBlacklist(), address(globalBlacklist)); - } - - function test_initialize_4() public { - console.log("Should properly set ERC20 symbol"); - assertEq(tested.symbol(), symbolAtInitTime); - } - - function test_initialize_5() public { - console.log("Should properly set ERC20 name"); - assertEq(tested.name(), nameAtInitTime); - } - - // ========================= - // === paused() function === - function test_paused_1() public { - console.log("Should return state of the global pause contract"); - assertEq(tested.paused(), false); - globalPause.pause(); - assertEq(tested.paused(), true); - globalPause.unpause(); - assertEq(tested.paused(), false); - } - - // ============================== - // === _beforeTokenTransfer() === - function testFuzz_beforeTokenTransfer_1(address from, address to, uint256 amount) public { - console.log("Should prevent transfer when contract is paused"); - globalPause.pause(); - expectRevertPaused(); - tested.public_beforeTokenTransfer(from, to, amount); - } - - function testFuzz_beforeTokenTransfer_2( - address from, - address to, - uint256 amount, - bool fromBlacklisted, - bool toBlacklisted - ) public { - console.log("Should prevent transfer when one or both addresses are blacklisted"); - - // Ensure from and to addresses are different and not the zero address - vm.assume(from != to); - vm.assume(from != address(0)); - vm.assume(to != address(0)); - - // Randomly blacklist from address - if (fromBlacklisted) globalBlacklist.blacklist(from); - - // Randomly blacklist to address - if (toBlacklisted) globalBlacklist.blacklist(to); - - // Expect revert if one or both addresses are blacklisted - if (fromBlacklisted || toBlacklisted) expectRevertRestricted(); - tested.public_beforeTokenTransfer(from, to, amount); - } - - function testfuzz_beforeTokenTransfer_3(address from, address to, uint256 amount) public { - console.log("Shouldn't revert else"); - tested.public_beforeTokenTransfer(from, to, amount); - } - - // ============================================ - // === __ERC20Base_init_unchained() function === - function test___ERC20Base_init_unchained_1() public { - console.log("Should revert if called by after initialization"); - vm.expectRevert(bytes("Initializable: contract is not initializing")); - tested.public___ERC20Base_init_unchained(); - } + TestedContract tested; + GlobalOwner globalOwner; + GlobalPause globalPause; + GlobalBlacklist globalBlacklist; + string nameAtInitTime = "Dummy Token"; + string symbolAtInitTime = "DUMMY"; + + function setUp() public { + // Deploy GlobalOwner + GlobalOwner impl = new GlobalOwner(); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), ""); + globalOwner = GlobalOwner(address(proxy)); + globalOwner.initialize(); + vm.label(address(globalOwner), "GlobalOwner"); + + // Deploy GlobalPause + GlobalPause impl2 = new GlobalPause(); + ERC1967Proxy proxy2 = new ERC1967Proxy(address(impl2), ""); + globalPause = GlobalPause(address(proxy2)); + globalPause.initialize(address(globalOwner)); + vm.label(address(globalPause), "GlobalPause"); + + // Deploy GlobalBlacklist + GlobalBlacklist impl3 = new GlobalBlacklist(); + ERC1967Proxy proxy3 = new ERC1967Proxy(address(impl3), ""); + globalBlacklist = GlobalBlacklist(address(proxy3)); + globalBlacklist.initialize(address(globalOwner)); + vm.label(address(globalBlacklist), "GlobalBlacklist"); + + // Deploy tested contract + TestedContract impl4 = new TestedContract(); + ERC1967Proxy proxy4 = new ERC1967Proxy(address(impl4), ""); + tested = TestedContract(address(proxy4)); + tested.initialize( + address(globalOwner), + address(globalPause), + address(globalBlacklist), + nameAtInitTime, + symbolAtInitTime + ); + vm.label(address(tested), "TestedContract"); + } + + // ============================= + // === initialize() function === + function test_initialize_1() public { + console.log("Should properly set global owner"); + assertEq(tested.globalOwner(), address(globalOwner)); + } + + function test_initialize_2() public { + console.log("Should properly set global pause"); + assertEq(tested.globalPause(), address(globalPause)); + } + + function test_initialize_3() public { + console.log("Should properly set global blacklist"); + assertEq(tested.globalBlacklist(), address(globalBlacklist)); + } + + function test_initialize_4() public { + console.log("Should properly set ERC20 symbol"); + assertEq(tested.symbol(), symbolAtInitTime); + } + + function test_initialize_5() public { + console.log("Should properly set ERC20 name"); + assertEq(tested.name(), nameAtInitTime); + } + + // ========================= + // === paused() function === + function test_paused_1() public { + console.log("Should return state of the global pause contract"); + assertEq(tested.paused(), false); + globalPause.pause(); + assertEq(tested.paused(), true); + globalPause.unpause(); + assertEq(tested.paused(), false); + } + + // ============================== + // === _beforeTokenTransfer() === + function testFuzz_beforeTokenTransfer_1( + address from, + address to, + uint256 amount + ) public { + console.log("Should prevent transfer when contract is paused"); + globalPause.pause(); + expectRevertPaused(); + tested.public_beforeTokenTransfer(from, to, amount); + } + + function testFuzz_beforeTokenTransfer_2( + address from, + address to, + uint256 amount, + bool fromBlacklisted, + bool toBlacklisted + ) public { + console.log( + "Should prevent transfer when one or both addresses are blacklisted" + ); + + // Ensure from and to addresses are different and not the zero address + vm.assume(from != to); + vm.assume(from != address(0)); + vm.assume(to != address(0)); + + // Randomly blacklist from address + if (fromBlacklisted) globalBlacklist.blacklist(from); + + // Randomly blacklist to address + if (toBlacklisted) globalBlacklist.blacklist(to); + + // Expect revert if one or both addresses are blacklisted + if (fromBlacklisted || toBlacklisted) expectRevertRestricted(); + tested.public_beforeTokenTransfer(from, to, amount); + } + + function testfuzz_beforeTokenTransfer_3( + address from, + address to, + uint256 amount + ) public { + console.log("Shouldn't revert else"); + tested.public_beforeTokenTransfer(from, to, amount); + } + + // ============================================ + // === __ERC20Base_init_unchained() function === + function test___ERC20Base_init_unchained_1() public { + console.log("Should revert if called by after initialization"); + vm.expectRevert( + bytes("Initializable: contract is not initializing") + ); + tested.public___ERC20Base_init_unchained(); + } } diff --git a/contracts/foundry/test/libs/APRHistory.t.sol b/contracts/foundry/test/libs/APRHistory.t.sol index cf1b72c7..5a3f4e13 100644 --- a/contracts/foundry/test/libs/APRHistory.t.sol +++ b/contracts/foundry/test/libs/APRHistory.t.sol @@ -2,312 +2,377 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {APRHistory as APRH} from "../../../src/libs/APRHistory.sol"; +import { APRHistory as APRH } from "../../../src/libs/APRHistory.sol"; contract Tests is Test { - APRH.Pack[] packs; - - function setUp() public {} - - /** - * @dev This function populate given number of packs with dummy data to the - * array of packs. Note that dummy data are unique per pack and so can - * be compared. - * @param number Number of packs to populate - */ - function populateDummyPacks(uint256 number) internal { - // Fill packs with 20 dummy packs - for (uint256 i = 0; i < number; i++) { - APRH.Pack memory pack = APRH.Pack({ - aprsUD7x3: [ - uint16(i * 4 + 1), - uint16(i * 4 + 2), - uint16(i * 4 + 3), - uint16(i * 4 + 4) - ], - timestamps: [ - uint40(i * 4 + 1), - uint40(i * 4 + 2), - uint40(i * 4 + 3), - uint40(i * 4 + 4) - ], - cursor: 4 - }); - packs.push(pack); - } + APRH.Pack[] packs; + + function setUp() public {} + + /** + * @dev This function populate given number of packs with dummy data to the + * array of packs. Note that dummy data are unique per pack and so can + * be compared. + * @param number Number of packs to populate + */ + function populateDummyPacks(uint256 number) internal { + // Fill packs with 20 dummy packs + for (uint256 i = 0; i < number; i++) { + APRH.Pack memory pack = APRH.Pack({ + aprsUD7x3: [ + uint16(i * 4 + 1), + uint16(i * 4 + 2), + uint16(i * 4 + 3), + uint16(i * 4 + 4) + ], + timestamps: [ + uint40(i * 4 + 1), + uint40(i * 4 + 2), + uint40(i * 4 + 3), + uint40(i * 4 + 4) + ], + cursor: 4 + }); + packs.push(pack); } - - // ===================================== - // === incrementReference() function === - function testFuzz_incrementReference_1(uint256 packIndex, uint32 cursorIndex) public { - console.log("Should revert if cursor index >3"); - - vm.assume(cursorIndex > 3); - vm.expectRevert(bytes("L1")); - - APRH.Reference memory ref = APRH.Reference(packIndex, cursorIndex); - APRH.incrementReference(ref); - } - - function testFuzz_incrementReference_2(uint256 packIndex, uint32 cursorIndex) public { - console.log("Should increment cursor by 1 if given reference's cursor <3"); - - // Bound cursor index to [0, 2] - cursorIndex = uint32(bound(cursorIndex, 0, 2)); - - APRH.Reference memory ref = APRH.Reference(packIndex, cursorIndex); - APRH.Reference memory newRef = APRH.incrementReference(ref); - - assertEq(newRef.packIndex, ref.packIndex); - assertEq(newRef.cursorIndex, ref.cursorIndex + 1); - } - - function testFuzz_incrementReference_3(uint256 packIndex) public { - console.log("Should increment pack by 1 and reset cursor if given reference's cursor == 3"); - - // Ensure packIndex is not equal to max uint256 so incrementing it by 1 will not overflow - vm.assume(packIndex != type(uint256).max); - - APRH.Reference memory ref = APRH.Reference(packIndex, 3); - APRH.Reference memory newRef = APRH.incrementReference(ref); - - assertEq(newRef.packIndex, ref.packIndex + 1); - assertEq(newRef.cursorIndex, 0); - } - - // ======================================= - // === getDataFromReference() function === - function testFuzz_getDataFromReference_1(uint256 packIndex, uint32 cursorIndex) public { - console.log("Should revert if cursor index >3"); - - vm.assume(cursorIndex > 3); - vm.expectRevert(bytes("L2")); - - APRH.Reference memory ref = APRH.Reference(packIndex, cursorIndex); - APRH.getDataFromReference(packs, ref); - } - - function testFuzz_getDataFromReference_2(uint256 packIndex, uint32 cursorIndex) public { - console.log("Should revert if pack index is out of bound"); - - populateDummyPacks(10); - - // Ensure packIndex is out of bound - packIndex = bound(packIndex, packs.length, type(uint256).max); - - // Bound cursor index to [0, 3] - cursorIndex = uint32(bound(cursorIndex, 0, 3)); - - vm.expectRevert(bytes("L3")); - - APRH.Reference memory ref = APRH.Reference(packIndex, cursorIndex); - APRH.getDataFromReference(packs, ref); - } - - function testFuzz_getDataFromReference_3(uint256 packIndex, uint32 cursorIndex) public { - console.log("Should revert if cursor index has not been written yet"); - - // Populate dummy data and flag all cursor index as unwritten - populateDummyPacks(10); - - // Reset all cursor index to 0 - for (uint256 i = 0; i < packs.length; i++) { - packs[i].cursor = 0; - } - - // Ensure packIndex is not out of bound - packIndex = bound(packIndex, 0, packs.length - 1); - - // Bound cursor index to [0, 3] - cursorIndex = uint32(bound(cursorIndex, 0, 3)); - - vm.expectRevert(bytes("L4")); - - APRH.Reference memory ref = APRH.Reference(packIndex, cursorIndex); - APRH.getDataFromReference(packs, ref); - } - - function testFuzz_getDataFromReference_4(uint256 packIndex, uint32 cursorIndex) public { - console.log("Should return right data"); - - populateDummyPacks(10); - - // Ensure packIndex is not out of bound - packIndex = bound(packIndex, 0, packs.length - 1); - - // Bound cursor index to [0, 3] - cursorIndex = uint32(bound(cursorIndex, 0, 3)); - - APRH.Reference memory ref = APRH.Reference(packIndex, cursorIndex); - APRH.CheckpointData memory checkpoint = APRH.getDataFromReference(packs, ref); - assertEq(checkpoint.aprUD7x3, packs[packIndex].aprsUD7x3[cursorIndex]); - assertEq(checkpoint.timestamp, packs[packIndex].timestamps[cursorIndex]); + } + + // ===================================== + // === incrementReference() function === + function testFuzz_incrementReference_1( + uint256 packIndex, + uint32 cursorIndex + ) public { + console.log("Should revert if cursor index >3"); + + vm.assume(cursorIndex > 3); + vm.expectRevert(bytes("L1")); + + APRH.Reference memory ref = APRH.Reference( + packIndex, + cursorIndex + ); + APRH.incrementReference(ref); + } + + function testFuzz_incrementReference_2( + uint256 packIndex, + uint32 cursorIndex + ) public { + console.log( + "Should increment cursor by 1 if given reference's cursor <3" + ); + + // Bound cursor index to [0, 2] + cursorIndex = uint32(bound(cursorIndex, 0, 2)); + + APRH.Reference memory ref = APRH.Reference( + packIndex, + cursorIndex + ); + APRH.Reference memory newRef = APRH.incrementReference(ref); + + assertEq(newRef.packIndex, ref.packIndex); + assertEq(newRef.cursorIndex, ref.cursorIndex + 1); + } + + function testFuzz_incrementReference_3(uint256 packIndex) public { + console.log( + "Should increment pack by 1 and reset cursor if given reference's cursor == 3" + ); + + // Ensure packIndex is not equal to max uint256 so incrementing it by 1 will not overflow + vm.assume(packIndex != type(uint256).max); + + APRH.Reference memory ref = APRH.Reference(packIndex, 3); + APRH.Reference memory newRef = APRH.incrementReference(ref); + + assertEq(newRef.packIndex, ref.packIndex + 1); + assertEq(newRef.cursorIndex, 0); + } + + // ======================================= + // === getDataFromReference() function === + function testFuzz_getDataFromReference_1( + uint256 packIndex, + uint32 cursorIndex + ) public { + console.log("Should revert if cursor index >3"); + + vm.assume(cursorIndex > 3); + vm.expectRevert(bytes("L2")); + + APRH.Reference memory ref = APRH.Reference( + packIndex, + cursorIndex + ); + APRH.getDataFromReference(packs, ref); + } + + function testFuzz_getDataFromReference_2( + uint256 packIndex, + uint32 cursorIndex + ) public { + console.log("Should revert if pack index is out of bound"); + + populateDummyPacks(10); + + // Ensure packIndex is out of bound + packIndex = bound(packIndex, packs.length, type(uint256).max); + + // Bound cursor index to [0, 3] + cursorIndex = uint32(bound(cursorIndex, 0, 3)); + + vm.expectRevert(bytes("L3")); + + APRH.Reference memory ref = APRH.Reference( + packIndex, + cursorIndex + ); + APRH.getDataFromReference(packs, ref); + } + + function testFuzz_getDataFromReference_3( + uint256 packIndex, + uint32 cursorIndex + ) public { + console.log( + "Should revert if cursor index has not been written yet" + ); + + // Populate dummy data and flag all cursor index as unwritten + populateDummyPacks(10); + + // Reset all cursor index to 0 + for (uint256 i = 0; i < packs.length; i++) { + packs[i].cursor = 0; } - // ===================================== - // === getLatestReference() function === - function test_getLatestReference_1() public { - console.log("Should revert if packs array is empty"); - vm.expectRevert(bytes("L5")); - APRH.getLatestReference(packs); + // Ensure packIndex is not out of bound + packIndex = bound(packIndex, 0, packs.length - 1); + + // Bound cursor index to [0, 3] + cursorIndex = uint32(bound(cursorIndex, 0, 3)); + + vm.expectRevert(bytes("L4")); + + APRH.Reference memory ref = APRH.Reference( + packIndex, + cursorIndex + ); + APRH.getDataFromReference(packs, ref); + } + + function testFuzz_getDataFromReference_4( + uint256 packIndex, + uint32 cursorIndex + ) public { + console.log("Should return right data"); + + populateDummyPacks(10); + + // Ensure packIndex is not out of bound + packIndex = bound(packIndex, 0, packs.length - 1); + + // Bound cursor index to [0, 3] + cursorIndex = uint32(bound(cursorIndex, 0, 3)); + + APRH.Reference memory ref = APRH.Reference( + packIndex, + cursorIndex + ); + APRH.CheckpointData memory checkpoint = APRH.getDataFromReference( + packs, + ref + ); + assertEq( + checkpoint.aprUD7x3, + packs[packIndex].aprsUD7x3[cursorIndex] + ); + assertEq( + checkpoint.timestamp, + packs[packIndex].timestamps[cursorIndex] + ); + } + + // ===================================== + // === getLatestReference() function === + function test_getLatestReference_1() public { + console.log("Should revert if packs array is empty"); + vm.expectRevert(bytes("L5")); + APRH.getLatestReference(packs); + } + + function test_getLatestReference_2() public { + console.log( + "Should revert if no checkpoint has been created yet" + ); + // Create a blank pack + APRH.newBlankPack(packs); + + vm.expectRevert(bytes("L6")); + APRH.getLatestReference(packs); + } + + function test_getLatestReference_3() public { + console.log( + "Should return latest cursor of latest pack if at least one checkpoint exists" + ); + + populateDummyPacks(10); + + APRH.Reference memory ref = APRH.getLatestReference(packs); + assertEq(ref.packIndex, packs.length - 1); + assertEq(ref.cursorIndex, packs[packs.length - 1].cursor - 1); + } + + function test_getLatestReference_4() public { + console.log( + "Should return cursor 3 of previous pack if latest pack is empty" + ); + + populateDummyPacks(10); + APRH.newBlankPack(packs); + + APRH.Reference memory ref = APRH.getLatestReference(packs); + assertEq(ref.packIndex, packs.length - 2); + assertEq(ref.cursorIndex, 3); + } + + // =============================== + // === newBlankPack() function === + function test_newBlankPack_1() public { + console.log("Should revert if latest pack is not full yet"); + + // Populate dummy data and ensure latest pack is not full yet + populateDummyPacks(10); + packs[packs.length - 1].cursor = 2; + + vm.expectRevert(bytes("L7")); + APRH.newBlankPack(packs); + } + + function test_newBlankPack_2() public { + console.log("Should append a new empty pack else"); + + populateDummyPacks(10); + + uint256 oldLength = packs.length; + APRH.newBlankPack(packs); + + assertEq(packs.length, oldLength + 1); + + APRH.Pack memory newPack = packs[packs.length - 1]; + assertEq(newPack.cursor, 0); + for (uint256 i = 0; i <= 3; i++) { + assertEq(newPack.aprsUD7x3[i], 0); } - - function test_getLatestReference_2() public { - console.log("Should revert if no checkpoint has been created yet"); - // Create a blank pack - APRH.newBlankPack(packs); - - vm.expectRevert(bytes("L6")); - APRH.getLatestReference(packs); + for (uint256 i = 0; i <= 3; i++) { + assertEq(newPack.timestamps[i], 0); } + } - function test_getLatestReference_3() public { - console.log("Should return latest cursor of latest pack if at least one checkpoint exists"); + // ========================= + // === setAPR() function === + function test_setAPR_1() public { + console.log("Should create a first pack if packs array is empty"); - populateDummyPacks(10); + assertEq(packs.length, 0); + APRH.setAPR(packs, 1234); + assertEq(packs.length, 1); + } - APRH.Reference memory ref = APRH.getLatestReference(packs); - assertEq(ref.packIndex, packs.length - 1); - assertEq(ref.cursorIndex, packs[packs.length - 1].cursor - 1); - } + function test_setAPR_2() public { + console.log( + "Should write APR at first empty cursor slot if latest pack is not full" + ); - function test_getLatestReference_4() public { - console.log("Should return cursor 3 of previous pack if latest pack is empty"); + // Populate dummy data and ensure latest pack is not full yet + populateDummyPacks(10); + packs[packs.length - 1].cursor = 2; - populateDummyPacks(10); - APRH.newBlankPack(packs); + APRH.setAPR(packs, 1234); - APRH.Reference memory ref = APRH.getLatestReference(packs); - assertEq(ref.packIndex, packs.length - 2); - assertEq(ref.cursorIndex, 3); - } + APRH.Pack memory writtenPack = packs[packs.length - 1]; + assertEq(writtenPack.aprsUD7x3[2], 1234); + assertEq(writtenPack.timestamps[2], block.timestamp); + } - // =============================== - // === newBlankPack() function === - function test_newBlankPack_1() public { - console.log("Should revert if latest pack is not full yet"); + function test_setAPR_3() public { + console.log( + "Should create new blank pack and write its first cursor index if latest pack is full" + ); - // Populate dummy data and ensure latest pack is not full yet - populateDummyPacks(10); - packs[packs.length - 1].cursor = 2; + populateDummyPacks(10); - vm.expectRevert(bytes("L7")); - APRH.newBlankPack(packs); - } - - function test_newBlankPack_2() public { - console.log("Should append a new empty pack else"); + uint256 oldLength = packs.length; + APRH.setAPR(packs, 1234); - populateDummyPacks(10); + assertEq(packs.length, oldLength + 1); + APRH.Pack memory writtenPack = packs[packs.length - 1]; + assertEq(writtenPack.aprsUD7x3[0], 1234); + assertEq(writtenPack.timestamps[0], block.timestamp); + } - uint256 oldLength = packs.length; - APRH.newBlankPack(packs); + function test_setAPR_4() public { + console.log( + "Should increment pack cursor after writing if latest pack wasn't full" + ); - assertEq(packs.length, oldLength + 1); - - APRH.Pack memory newPack = packs[packs.length - 1]; - assertEq(newPack.cursor, 0); - for (uint256 i = 0; i <= 3; i++) { - assertEq(newPack.aprsUD7x3[i], 0); - } - for (uint256 i = 0; i <= 3; i++) { - assertEq(newPack.timestamps[i], 0); - } - } + populateDummyPacks(10); + packs[packs.length - 1].cursor = 2; - // ========================= - // === setAPR() function === - function test_setAPR_1() public { - console.log("Should create a first pack if packs array is empty"); + uint32 oldCursor = packs[packs.length - 1].cursor; + APRH.setAPR(packs, 1234); - assertEq(packs.length, 0); - APRH.setAPR(packs, 1234); - assertEq(packs.length, 1); - } + assertEq(packs[packs.length - 1].cursor, oldCursor + 1); + } - function test_setAPR_2() public { - console.log("Should write APR at first empty cursor slot if latest pack is not full"); + function test_setAPR_5() public { + console.log( + "Should set cursor to 1 after writing a new blank pack" + ); - // Populate dummy data and ensure latest pack is not full yet - populateDummyPacks(10); - packs[packs.length - 1].cursor = 2; + populateDummyPacks(10); - APRH.setAPR(packs, 1234); + APRH.setAPR(packs, 1234); - APRH.Pack memory writtenPack = packs[packs.length - 1]; - assertEq(writtenPack.aprsUD7x3[2], 1234); - assertEq(writtenPack.timestamps[2], block.timestamp); - } + assertEq(packs[packs.length - 1].cursor, 1); + } - function test_setAPR_3() public { - console.log( - "Should create new blank pack and write its first cursor index if latest pack is full" - ); + function test_setAPR_6() public { + console.log("Should change value of getAPR()"); - populateDummyPacks(10); + populateDummyPacks(10); - uint256 oldLength = packs.length; - APRH.setAPR(packs, 1234); + uint256 oldAPR = APRH.getAPR(packs); + APRH.setAPR(packs, 1234); - assertEq(packs.length, oldLength + 1); - APRH.Pack memory writtenPack = packs[packs.length - 1]; - assertEq(writtenPack.aprsUD7x3[0], 1234); - assertEq(writtenPack.timestamps[0], block.timestamp); - } + assertFalse(oldAPR == 1234); + assertEq(APRH.getAPR(packs), 1234); + } - function test_setAPR_4() public { - console.log("Should increment pack cursor after writing if latest pack wasn't full"); + // ========================= + // === getAPR() function === + function test_getAPR_1() public { + console.log("Should revert if no APR has been set yet"); - populateDummyPacks(10); - packs[packs.length - 1].cursor = 2; + // Expect revert + vm.expectRevert(bytes("L5")); + APRH.getAPR(packs); + } - uint32 oldCursor = packs[packs.length - 1].cursor; - APRH.setAPR(packs, 1234); + function test_getAPR_3() public { + console.log( + "Should else return latest written cursor's APR of latest pack" + ); - assertEq(packs[packs.length - 1].cursor, oldCursor + 1); - } + populateDummyPacks(10); - function test_setAPR_5() public { - console.log("Should set cursor to 1 after writing a new blank pack"); + uint256 apr = APRH.getAPR(packs); + APRH.Pack memory latestPack = packs[packs.length - 1]; + uint256 latestCursor = latestPack.cursor; - populateDummyPacks(10); - - APRH.setAPR(packs, 1234); - - assertEq(packs[packs.length - 1].cursor, 1); - } - - function test_setAPR_6() public { - console.log("Should change value of getAPR()"); - - populateDummyPacks(10); - - uint256 oldAPR = APRH.getAPR(packs); - APRH.setAPR(packs, 1234); - - assertFalse(oldAPR == 1234); - assertEq(APRH.getAPR(packs), 1234); - } - - // ========================= - // === getAPR() function === - function test_getAPR_1() public { - console.log("Should revert if no APR has been set yet"); - - // Expect revert - vm.expectRevert(bytes("L5")); - APRH.getAPR(packs); - } - - function test_getAPR_3() public { - console.log("Should else return latest written cursor's APR of latest pack"); - - populateDummyPacks(10); - - uint256 apr = APRH.getAPR(packs); - APRH.Pack memory latestPack = packs[packs.length - 1]; - uint256 latestCursor = latestPack.cursor; - - assertEq(apr, latestPack.aprsUD7x3[latestCursor - 1]); - } + assertEq(apr, latestPack.aprsUD7x3[latestCursor - 1]); + } } diff --git a/contracts/foundry/test/libs/SUD.t.sol b/contracts/foundry/test/libs/SUD.t.sol index 47ed0acf..c5e2baaf 100644 --- a/contracts/foundry/test/libs/SUD.t.sol +++ b/contracts/foundry/test/libs/SUD.t.sol @@ -2,371 +2,451 @@ pragma solidity ^0.8.18; import "../../lib/forge-std/src/Test.sol"; -import {SUD} from "../../../src/libs/SUD.sol"; -import {GenericERC20} from "../../../src/GenericERC20.sol"; +import { SUD } from "../../../src/libs/SUD.sol"; +import { GenericERC20 } from "../../../src/GenericERC20.sol"; -import {ModifiersExpectations} from "../_helpers/ModifiersExpectations.sol"; +import { ModifiersExpectations } from "../_helpers/ModifiersExpectations.sol"; contract Tests is Test { - // ============================= - // === decimalsOf() function === - function testFuzz_decimalsOf_1(uint8 decimals) public { - console.log("Should return decimals of input token"); + // ============================= + // === decimalsOf() function === + function testFuzz_decimalsOf_1(uint8 decimals) public { + console.log("Should return decimals of input token"); + + // Deploy an ERC20 token with random amount of decimals + GenericERC20 token = new GenericERC20("Test", "TEST", decimals); + + // Assert that the result is the token decimals + assertEq(SUD.decimalsOf(address(token)), decimals); + } + + // ============================= + // === fromAmount() function === + function testFuzz_fromAmount_1( + uint8 decimals, + uint256 nAmount + ) public { + console.log( + "Should return UD71x6 if decimals <3 (non-overflow cases)" + ); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Compute missing decimals to reach UD71x6 + uint256 missingDecimals = 6 - decimals; + + // Bound nAmount to non-overflow cases + nAmount = bound( + nAmount, + 0, + type(uint256).max / 10 ** missingDecimals + ); + + // Assert that the result is input converted to UD71x6 + assertEq( + SUD.fromAmount(nAmount, decimals), + nAmount * 10 ** missingDecimals + ); + } + + function testFuzz_fromAmount_2( + uint8 decimals, + uint256 nAmount + ) public { + console.log("Should revert on overflow when decimals <3"); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Compute missing decimals to reach UD71x6 + uint256 missingDecimals = 6 - decimals; + + // Bound n to overflow cases + nAmount = bound( + nAmount, + type(uint256).max / 10 ** missingDecimals + 1, + type(uint256).max + ); + + // Assert that it reverts + vm.expectRevert(stdError.arithmeticError); + SUD.fromAmount(nAmount, decimals); + } + + function testFuzz_fromAmount_3( + uint8 decimals, + uint256 nAmount + ) public { + console.log( + "Should return input times 10^3 if decimals >=3 (non-overflow cases)" + ); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to non-overflow cases + nAmount = bound(nAmount, 0, type(uint256).max / 10 ** 3); + + assertEq(SUD.fromAmount(nAmount, decimals), nAmount * 10 ** 3); + } + + function testFuzz_fromAmount_4( + uint8 decimals, + uint256 nAmount + ) public { + console.log("Should revert on overflow when decimals >=3"); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to overflow cases + nAmount = bound( + nAmount, + type(uint256).max / 10 ** 3 + 1, + type(uint256).max + ); + + // Assert that it reverts + vm.expectRevert(stdError.arithmeticError); + SUD.fromAmount(nAmount, decimals); + } + + // =========================== + // === toAmount() function === + function testFuzz_toAmount_1(uint8 decimals, uint256 nSUD) public { + console.log( + "Should convert an UD71x6 to amount if decimals <3 (non-underflow cases)" + ); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Compute missing decimals to reach UD71x6 + uint256 missingDecimals = 6 - decimals; + + // Bound n to non-underflow cases + nSUD = bound(nSUD, 10 ** missingDecimals, type(uint256).max); + + // Assert that the result is input converted to amount + assertEq( + SUD.toAmount(nSUD, decimals), + nSUD / 10 ** missingDecimals + ); + } + + function testFuzz_toAmount_2(uint8 decimals, uint256 nSUD) public { + console.log( + "Shouldn't revert for underflow and return 0 instead, when decimals <3" + ); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Compute missing decimals to reach UD71x6 + uint256 missingDecimals = 6 - decimals; + + // Bound n to underflow cases + nSUD = bound(nSUD, 0, 10 ** missingDecimals - 1); + + // Assert output is 0 + assertEq(SUD.toAmount(nSUD, decimals), 0); + } + + function testFuzz_toAmount_3(uint8 decimals, uint256 nSUD) public { + console.log( + "Should return input divided by 10^3 if decimals >=3 (non-underflow cases)" + ); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to non-underflow cases + nSUD = bound(nSUD, 10 ** 3, type(uint256).max); + + // Assert the result is input divided by 10^3 + assertEq(SUD.toAmount(nSUD, decimals), nSUD / 10 ** 3); + } + + function testFuzz_toAmount_4(uint8 decimals, uint256 nSUD) public { + console.log( + "Shouldn't revert for underflow and return 0 instead, when decimals >=3" + ); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to underflow cases + nSUD = bound(nSUD, 0, 10 ** 3 - 1); + + // Assert output is 0 + assertEq(SUD.toAmount(nSUD, decimals), 0); + } + + // =========================== + // === fromRate() function === + function testFuzz_fromRate_1( + uint8 decimals, + uint256 nUD7x3 + ) public { + console.log( + "Should return UD71x6 if decimals <3 (non-overflow cases)" + ); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Bound n to non-overflow cases + nUD7x3 = bound(nUD7x3, 0, type(uint256).max / 10 ** 3); + + // Assert that the result is input converted to UD71x6 + assertEq(SUD.fromRate(nUD7x3, decimals), nUD7x3 * 10 ** 3); + } + + function testFuzz_fromRate_2( + uint8 decimals, + uint256 nUD7x3 + ) public { + console.log("Should revert on overflow when decimals <3"); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Bound n to overflow cases + nUD7x3 = bound( + nUD7x3, + type(uint256).max / 10 ** 3 + 1, + type(uint256).max + ); + + // Assert that it reverts + vm.expectRevert(stdError.arithmeticError); + SUD.fromRate(nUD7x3, decimals); + } + + function testFuzz_fromRate_3( + uint8 decimals, + uint256 nUD7x3 + ) public { + console.log( + "Should scale input rate by token decimals number if decimals >=3 (non-overflow cases)" + ); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to non-overflow cases + nUD7x3 = bound(nUD7x3, 0, type(uint256).max / 10 ** decimals); + + assertEq(SUD.fromRate(nUD7x3, decimals), nUD7x3 * 10 ** decimals); + } + + function testFuzz_fromRate_4( + uint8 decimals, + uint256 nUD7x3 + ) public { + console.log("Should revert on overflow when decimals >=3"); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to overflow cases + nUD7x3 = bound( + nUD7x3, + type(uint256).max / 10 ** decimals + 1, + type(uint256).max + ); + + // Assert that it reverts + vm.expectRevert(stdError.arithmeticError); + SUD.fromRate(nUD7x3, decimals); + } + + // ========================= + // === toRate() function === + function testFuzz_toRate_1(uint8 decimals, uint256 nSUD) public { + console.log( + "Should convert an UD71x6 to rate if decimals <3 (non-underflow cases)" + ); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Bound n to non-underflow cases + nSUD = bound(nSUD, 10 ** 3, type(uint256).max); + + // Assert that the result is input converted to amount + assertEq(SUD.toRate(nSUD, decimals), nSUD / 10 ** 3); + } + + function testFuzz_toRate_2(uint8 decimals, uint256 nSUD) public { + console.log( + "Shouldn't revert for underflow and return 0 instead, when decimals <3" + ); + + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); + + // Bound n to underflow cases + nSUD = bound(nSUD, 0, 10 ** 3 - 1); + + // Assert output is 0 + assertEq(SUD.toRate(nSUD, decimals), 0); + } + + function testFuzz_toRate_3(uint8 decimals, uint256 nSUD) public { + console.log( + "Should return input divided by 10^decimals if decimals >=3 (non-underflow cases)" + ); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to non-underflow cases + nSUD = bound(nSUD, 10 ** decimals, type(uint256).max); + + // Assert the result is input divided by 10^3 + assertEq(SUD.toRate(nSUD, decimals), nSUD / 10 ** decimals); + } + + function testFuzz_toRate_4(uint8 decimals, uint256 nSUD) public { + console.log( + "Shouldn't revert for underflow and return 0 instead, when decimals >=3" + ); + + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); + + // Bound n to underflow cases + nSUD = bound(nSUD, 0, 10 ** decimals - 1); + + // Assert output is 0 + assertEq(SUD.toRate(nSUD, decimals), 0); + } + + // ========================== + // === fromInt() function === + function testFuzz_fromInt_1(uint8 decimals, uint256 n) public { + console.log( + "Should scale input by 6 decimals (UD71x6) if decimals <3 (non-overflow cases)" + ); - // Deploy an ERC20 token with random amount of decimals - GenericERC20 token = new GenericERC20("Test", "TEST", decimals); + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); - // Assert that the result is the token decimals - assertEq(SUD.decimalsOf(address(token)), decimals); - } + // Bound n to non-overflow cases + n = bound(n, 0, type(uint256).max / 10 ** 6); - // ============================= - // === fromAmount() function === - function testFuzz_fromAmount_1(uint8 decimals, uint256 nAmount) public { - console.log("Should return UD71x6 if decimals <3 (non-overflow cases)"); + // Assert that the result is input converted to UD71x6 + assertEq(SUD.fromInt(n, decimals), n * 10 ** 6); + } - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); + function testFuzz_fromInt_2(uint8 decimals, uint256 n) public { + console.log("Should revert on overflow when decimals <3"); - // Compute missing decimals to reach UD71x6 - uint256 missingDecimals = 6 - decimals; + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); - // Bound nAmount to non-overflow cases - nAmount = bound(nAmount, 0, type(uint256).max / 10 ** missingDecimals); + // Bound n to overflow cases + n = bound(n, type(uint256).max / 10 ** 6 + 1, type(uint256).max); - // Assert that the result is input converted to UD71x6 - assertEq(SUD.fromAmount(nAmount, decimals), nAmount * 10 ** missingDecimals); - } + // Assert that it reverts + vm.expectRevert(stdError.arithmeticError); + SUD.fromInt(n, decimals); + } - function testFuzz_fromAmount_2(uint8 decimals, uint256 nAmount) public { - console.log("Should revert on overflow when decimals <3"); + function testFuzz_fromInt_3(uint8 decimals, uint256 n) public { + console.log( + "Should return input times 10^decimals+3 number when decimals >=3 (non-overflow cases)" + ); - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); - // Compute missing decimals to reach UD71x6 - uint256 missingDecimals = 6 - decimals; + // Bound n to non-overflow cases + n = bound(n, 0, type(uint256).max / 10 ** (decimals + 3)); - // Bound n to overflow cases - nAmount = bound(nAmount, type(uint256).max / 10 ** missingDecimals + 1, type(uint256).max); + assertEq(SUD.fromInt(n, decimals), n * 10 ** (decimals + 3)); + } - // Assert that it reverts - vm.expectRevert(stdError.arithmeticError); - SUD.fromAmount(nAmount, decimals); - } + function testFuzz_fromInt_4(uint8 decimals, uint256 n) public { + console.log("Should revert on overflow when decimals >=3"); - function testFuzz_fromAmount_3(uint8 decimals, uint256 nAmount) public { - console.log("Should return input times 10^3 if decimals >=3 (non-overflow cases)"); + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); + // Bound n to overflow cases + n = bound( + n, + type(uint256).max / 10 ** (decimals + 3) + 1, + type(uint256).max + ); - // Bound n to non-overflow cases - nAmount = bound(nAmount, 0, type(uint256).max / 10 ** 3); + // Assert that it reverts + vm.expectRevert(stdError.arithmeticError); + SUD.fromInt(n, decimals); + SUD.toInt(n, decimals); + } - assertEq(SUD.fromAmount(nAmount, decimals), nAmount * 10 ** 3); - } + // ========================= + // === toInt() function === + function testFuzz_toInt_1(uint8 decimals, uint256 n) public { + console.log( + "Should convert an UD71x6 to integer if decimals <3 (non-underflow cases)" + ); - function testFuzz_fromAmount_4(uint8 decimals, uint256 nAmount) public { - console.log("Should revert on overflow when decimals >=3"); + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); + // Bound n to non-underflow cases + n = bound(n, 10 ** 6, type(uint256).max); - // Bound n to overflow cases - nAmount = bound(nAmount, type(uint256).max / 10 ** 3 + 1, type(uint256).max); + // Assert that the result is input converted to amount + assertEq(SUD.toInt(n, decimals), n / 10 ** 6); + } - // Assert that it reverts - vm.expectRevert(stdError.arithmeticError); - SUD.fromAmount(nAmount, decimals); - } + function testFuzz_toInt_2(uint8 decimals, uint256 n) public { + console.log( + "Shouldn't revert for underflow and return 0 instead, when decimals <3" + ); - // =========================== - // === toAmount() function === - function testFuzz_toAmount_1(uint8 decimals, uint256 nSUD) public { - console.log("Should convert an UD71x6 to amount if decimals <3 (non-underflow cases)"); + // Bound decimals to [0, 2] + decimals = uint8(bound(decimals, 0, 2)); - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); + // Bound n to underflow cases + n = bound(n, 0, 10 ** 6 - 1); - // Compute missing decimals to reach UD71x6 - uint256 missingDecimals = 6 - decimals; + // Assert output is 0 + assertEq(SUD.toInt(n, decimals), 0); + } - // Bound n to non-underflow cases - nSUD = bound(nSUD, 10 ** missingDecimals, type(uint256).max); + function testFuzz_toInt_3(uint8 decimals, uint256 n) public { + console.log( + "Should return input divided by 10^decimals+3 if decimals >=3 (non-underflow cases)" + ); - // Assert that the result is input converted to amount - assertEq(SUD.toAmount(nSUD, decimals), nSUD / 10 ** missingDecimals); - } + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); - function testFuzz_toAmount_2(uint8 decimals, uint256 nSUD) public { - console.log("Shouldn't revert for underflow and return 0 instead, when decimals <3"); + // Bound n to non-underflow cases + n = bound(n, 10 ** (decimals + 3), type(uint256).max); - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); + // Assert the result is input divided by 10^3 + assertEq(SUD.toInt(n, decimals), n / 10 ** (decimals + 3)); + } - // Compute missing decimals to reach UD71x6 - uint256 missingDecimals = 6 - decimals; + function testFuzz_toInt_4(uint8 decimals, uint256 n) public { + console.log( + "Shouldn't revert for underflow and return 0 instead, when decimals >=3" + ); - // Bound n to underflow cases - nSUD = bound(nSUD, 0, 10 ** missingDecimals - 1); + // Bound decimals to [3, 18] + decimals = uint8(bound(decimals, 3, 18)); - // Assert output is 0 - assertEq(SUD.toAmount(nSUD, decimals), 0); - } + // Bound n to underflow cases + n = bound(n, 0, 10 ** (decimals + 3) - 1); - function testFuzz_toAmount_3(uint8 decimals, uint256 nSUD) public { - console.log("Should return input divided by 10^3 if decimals >=3 (non-underflow cases)"); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to non-underflow cases - nSUD = bound(nSUD, 10 ** 3, type(uint256).max); - - // Assert the result is input divided by 10^3 - assertEq(SUD.toAmount(nSUD, decimals), nSUD / 10 ** 3); - } - - function testFuzz_toAmount_4(uint8 decimals, uint256 nSUD) public { - console.log("Shouldn't revert for underflow and return 0 instead, when decimals >=3"); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to underflow cases - nSUD = bound(nSUD, 0, 10 ** 3 - 1); - - // Assert output is 0 - assertEq(SUD.toAmount(nSUD, decimals), 0); - } - - // =========================== - // === fromRate() function === - function testFuzz_fromRate_1(uint8 decimals, uint256 nUD7x3) public { - console.log("Should return UD71x6 if decimals <3 (non-overflow cases)"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to non-overflow cases - nUD7x3 = bound(nUD7x3, 0, type(uint256).max / 10 ** 3); - - // Assert that the result is input converted to UD71x6 - assertEq(SUD.fromRate(nUD7x3, decimals), nUD7x3 * 10 ** 3); - } - - function testFuzz_fromRate_2(uint8 decimals, uint256 nUD7x3) public { - console.log("Should revert on overflow when decimals <3"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to overflow cases - nUD7x3 = bound(nUD7x3, type(uint256).max / 10 ** 3 + 1, type(uint256).max); - - // Assert that it reverts - vm.expectRevert(stdError.arithmeticError); - SUD.fromRate(nUD7x3, decimals); - } - - function testFuzz_fromRate_3(uint8 decimals, uint256 nUD7x3) public { - console.log( - "Should scale input rate by token decimals number if decimals >=3 (non-overflow cases)" - ); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to non-overflow cases - nUD7x3 = bound(nUD7x3, 0, type(uint256).max / 10 ** decimals); - - assertEq(SUD.fromRate(nUD7x3, decimals), nUD7x3 * 10 ** decimals); - } - - function testFuzz_fromRate_4(uint8 decimals, uint256 nUD7x3) public { - console.log("Should revert on overflow when decimals >=3"); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to overflow cases - nUD7x3 = bound(nUD7x3, type(uint256).max / 10 ** decimals + 1, type(uint256).max); - - // Assert that it reverts - vm.expectRevert(stdError.arithmeticError); - SUD.fromRate(nUD7x3, decimals); - } - - // ========================= - // === toRate() function === - function testFuzz_toRate_1(uint8 decimals, uint256 nSUD) public { - console.log("Should convert an UD71x6 to rate if decimals <3 (non-underflow cases)"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to non-underflow cases - nSUD = bound(nSUD, 10 ** 3, type(uint256).max); - - // Assert that the result is input converted to amount - assertEq(SUD.toRate(nSUD, decimals), nSUD / 10 ** 3); - } - - function testFuzz_toRate_2(uint8 decimals, uint256 nSUD) public { - console.log("Shouldn't revert for underflow and return 0 instead, when decimals <3"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to underflow cases - nSUD = bound(nSUD, 0, 10 ** 3 - 1); - - // Assert output is 0 - assertEq(SUD.toRate(nSUD, decimals), 0); - } - - function testFuzz_toRate_3(uint8 decimals, uint256 nSUD) public { - console.log( - "Should return input divided by 10^decimals if decimals >=3 (non-underflow cases)" - ); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to non-underflow cases - nSUD = bound(nSUD, 10 ** decimals, type(uint256).max); - - // Assert the result is input divided by 10^3 - assertEq(SUD.toRate(nSUD, decimals), nSUD / 10 ** decimals); - } - - function testFuzz_toRate_4(uint8 decimals, uint256 nSUD) public { - console.log("Shouldn't revert for underflow and return 0 instead, when decimals >=3"); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to underflow cases - nSUD = bound(nSUD, 0, 10 ** decimals - 1); - - // Assert output is 0 - assertEq(SUD.toRate(nSUD, decimals), 0); - } - - // ========================== - // === fromInt() function === - function testFuzz_fromInt_1(uint8 decimals, uint256 n) public { - console.log( - "Should scale input by 6 decimals (UD71x6) if decimals <3 (non-overflow cases)" - ); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to non-overflow cases - n = bound(n, 0, type(uint256).max / 10 ** 6); - - // Assert that the result is input converted to UD71x6 - assertEq(SUD.fromInt(n, decimals), n * 10 ** 6); - } - - function testFuzz_fromInt_2(uint8 decimals, uint256 n) public { - console.log("Should revert on overflow when decimals <3"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to overflow cases - n = bound(n, type(uint256).max / 10 ** 6 + 1, type(uint256).max); - - // Assert that it reverts - vm.expectRevert(stdError.arithmeticError); - SUD.fromInt(n, decimals); - } - - function testFuzz_fromInt_3(uint8 decimals, uint256 n) public { - console.log( - "Should return input times 10^decimals+3 number when decimals >=3 (non-overflow cases)" - ); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to non-overflow cases - n = bound(n, 0, type(uint256).max / 10 ** (decimals + 3)); - - assertEq(SUD.fromInt(n, decimals), n * 10 ** (decimals + 3)); - } - - function testFuzz_fromInt_4(uint8 decimals, uint256 n) public { - console.log("Should revert on overflow when decimals >=3"); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to overflow cases - n = bound(n, type(uint256).max / 10 ** (decimals + 3) + 1, type(uint256).max); - - // Assert that it reverts - vm.expectRevert(stdError.arithmeticError); - SUD.fromInt(n, decimals); - SUD.toInt(n, decimals); - } - - // ========================= - // === toInt() function === - function testFuzz_toInt_1(uint8 decimals, uint256 n) public { - console.log("Should convert an UD71x6 to integer if decimals <3 (non-underflow cases)"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to non-underflow cases - n = bound(n, 10 ** 6, type(uint256).max); - - // Assert that the result is input converted to amount - assertEq(SUD.toInt(n, decimals), n / 10 ** 6); - } - - function testFuzz_toInt_2(uint8 decimals, uint256 n) public { - console.log("Shouldn't revert for underflow and return 0 instead, when decimals <3"); - - // Bound decimals to [0, 2] - decimals = uint8(bound(decimals, 0, 2)); - - // Bound n to underflow cases - n = bound(n, 0, 10 ** 6 - 1); - - // Assert output is 0 - assertEq(SUD.toInt(n, decimals), 0); - } - - function testFuzz_toInt_3(uint8 decimals, uint256 n) public { - console.log( - "Should return input divided by 10^decimals+3 if decimals >=3 (non-underflow cases)" - ); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to non-underflow cases - n = bound(n, 10 ** (decimals + 3), type(uint256).max); - - // Assert the result is input divided by 10^3 - assertEq(SUD.toInt(n, decimals), n / 10 ** (decimals + 3)); - } - - function testFuzz_toInt_4(uint8 decimals, uint256 n) public { - console.log("Shouldn't revert for underflow and return 0 instead, when decimals >=3"); - - // Bound decimals to [3, 18] - decimals = uint8(bound(decimals, 3, 18)); - - // Bound n to underflow cases - n = bound(n, 0, 10 ** (decimals + 3) - 1); - - // Assert output is 0 - assertEq(SUD.toInt(n, decimals), 0); - } + // Assert output is 0 + assertEq(SUD.toInt(n, decimals), 0); + } } diff --git a/contracts/hardhat/deployments/arbitrum/APRHistory.json b/contracts/hardhat/deployments/arbitrum/APRHistory.json index b5277062..136f5467 100644 --- a/contracts/hardhat/deployments/arbitrum/APRHistory.json +++ b/contracts/hardhat/deployments/arbitrum/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalBlacklist.json b/contracts/hardhat/deployments/arbitrum/GlobalBlacklist.json index 49bd7d41..2d18c2b7 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalBlacklist.json @@ -304,9 +304,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe4Af4573bFc5F04D8b84c61744de8A94059f2462" - ] + "args": ["0xe4Af4573bFc5F04D8b84c61744de8A94059f2462"] }, "implementation": "0x896E3B079aa7A00413c074a5C888f3b96d4d3bcA", "devdoc": { @@ -328,4 +326,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Implementation.json index 8309b92d..a37b4ffd 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Implementation.json @@ -509,4 +509,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Proxy.json index 56814f18..ce602c4f 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalOwner.json b/contracts/hardhat/deployments/arbitrum/GlobalOwner.json index f09f64b3..6b6affd5 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalOwner.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", - "0x8129fc1c" - ], + "args": ["0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/arbitrum/GlobalOwner_Implementation.json index 498a7e8e..c907a424 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/arbitrum/GlobalOwner_Proxy.json index 6570627c..eb29f2bd 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", - "0x8129fc1c" - ], + "args": ["0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalPause.json b/contracts/hardhat/deployments/arbitrum/GlobalPause.json index eba2db77..e2ead723 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalPause.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe4Af4573bFc5F04D8b84c61744de8A94059f2462" - ] + "args": ["0xe4Af4573bFc5F04D8b84c61744de8A94059f2462"] }, "implementation": "0xd4568D313FA2d5C6EBA37C9f30F6FB8D1C552ddd", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalPause_Implementation.json b/contracts/hardhat/deployments/arbitrum/GlobalPause_Implementation.json index 1d7ddeb6..6c6e31ed 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/GlobalPause_Proxy.json b/contracts/hardhat/deployments/arbitrum/GlobalPause_Proxy.json index 6d4642ce..9ebc7ebf 100644 --- a/contracts/hardhat/deployments/arbitrum/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/arbitrum/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LDYStaking.json b/contracts/hardhat/deployments/arbitrum/LDYStaking.json index 46f1b00f..feb0faab 100644 --- a/contracts/hardhat/deployments/arbitrum/LDYStaking.json +++ b/contracts/hardhat/deployments/arbitrum/LDYStaking.json @@ -1018,22 +1018,10 @@ "0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350", "0x999FAF0AF2fF109938eeFE6A7BF91CA56f0D07e1", [ - [ - 0, - 10000 - ], - [ - 2678400, - 40000 - ], - [ - 16070400, - 60000 - ], - [ - 32140800, - 100000 - ] + [0, 10000], + [2678400, 40000], + [16070400, 60000], + [32140800, 100000] ], 32140800, "1000000000000000000000" @@ -1059,4 +1047,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LDYStaking_Implementation.json b/contracts/hardhat/deployments/arbitrum/LDYStaking_Implementation.json index e322ea9d..87d30188 100644 --- a/contracts/hardhat/deployments/arbitrum/LDYStaking_Implementation.json +++ b/contracts/hardhat/deployments/arbitrum/LDYStaking_Implementation.json @@ -1738,4 +1738,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LDYStaking_Proxy.json b/contracts/hardhat/deployments/arbitrum/LDYStaking_Proxy.json index 3d1ad933..ed5e3b9c 100644 --- a/contracts/hardhat/deployments/arbitrum/LDYStaking_Proxy.json +++ b/contracts/hardhat/deployments/arbitrum/LDYStaking_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LTokenSignaler.json b/contracts/hardhat/deployments/arbitrum/LTokenSignaler.json index 267d7a73..d1dbaaea 100644 --- a/contracts/hardhat/deployments/arbitrum/LTokenSignaler.json +++ b/contracts/hardhat/deployments/arbitrum/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe4Af4573bFc5F04D8b84c61744de8A94059f2462" - ] + "args": ["0xe4Af4573bFc5F04D8b84c61744de8A94059f2462"] }, "implementation": "0xf97DfCed60FBeF9452dbEd18778a4Fe6c14bBAF4", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Implementation.json index 42e15b8f..2f575f68 100644 --- a/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Proxy.json index 54c5572c..30270d30 100644 --- a/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/arbitrum/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LUSDC.json b/contracts/hardhat/deployments/arbitrum/LUSDC.json index 836c287a..cf6f9906 100644 --- a/contracts/hardhat/deployments/arbitrum/LUSDC.json +++ b/contracts/hardhat/deployments/arbitrum/LUSDC.json @@ -1422,4 +1422,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LUSDC_Implementation.json b/contracts/hardhat/deployments/arbitrum/LUSDC_Implementation.json index 04d186f9..20edb636 100644 --- a/contracts/hardhat/deployments/arbitrum/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/arbitrum/LUSDC_Implementation.json @@ -2547,4 +2547,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/LUSDC_Proxy.json b/contracts/hardhat/deployments/arbitrum/LUSDC_Proxy.json index f25537da..3e109367 100644 --- a/contracts/hardhat/deployments/arbitrum/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/arbitrum/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/PreMining.json b/contracts/hardhat/deployments/arbitrum/PreMining.json index b215109f..56ddaf2d 100644 --- a/contracts/hardhat/deployments/arbitrum/PreMining.json +++ b/contracts/hardhat/deployments/arbitrum/PreMining.json @@ -1036,4 +1036,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/arbitrum/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/arbitrum/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/arbitrum/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/solcInputs/763174e07eec40e5a74770adce214c49.json b/contracts/hardhat/deployments/arbitrum/solcInputs/763174e07eec40e5a74770adce214c49.json index 6a93722f..d9d999f6 100644 --- a/contracts/hardhat/deployments/arbitrum/solcInputs/763174e07eec40e5a74770adce214c49.json +++ b/contracts/hardhat/deployments/arbitrum/solcInputs/763174e07eec40e5a74770adce214c49.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/solcInputs/8620a8f3d72d00ca5f27836b0fbcc97d.json b/contracts/hardhat/deployments/arbitrum/solcInputs/8620a8f3d72d00ca5f27836b0fbcc97d.json index 87c652d0..4358f0a5 100644 --- a/contracts/hardhat/deployments/arbitrum/solcInputs/8620a8f3d72d00ca5f27836b0fbcc97d.json +++ b/contracts/hardhat/deployments/arbitrum/solcInputs/8620a8f3d72d00ca5f27836b0fbcc97d.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json b/contracts/hardhat/deployments/arbitrum/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json index 54faa9f3..d190fcdb 100644 --- a/contracts/hardhat/deployments/arbitrum/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json +++ b/contracts/hardhat/deployments/arbitrum/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/solcInputs/d4bb825b27822879e0607341255f6d62.json b/contracts/hardhat/deployments/arbitrum/solcInputs/d4bb825b27822879e0607341255f6d62.json index c7b17cdf..ee597bad 100644 --- a/contracts/hardhat/deployments/arbitrum/solcInputs/d4bb825b27822879e0607341255f6d62.json +++ b/contracts/hardhat/deployments/arbitrum/solcInputs/d4bb825b27822879e0607341255f6d62.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrum/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json b/contracts/hardhat/deployments/arbitrum/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json index 7cb2101f..05fae2a0 100644 --- a/contracts/hardhat/deployments/arbitrum/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json +++ b/contracts/hardhat/deployments/arbitrum/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json @@ -63,13 +63,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/APRHistory.json b/contracts/hardhat/deployments/arbitrumGoerli/APRHistory.json index 5c92f1bb..10f29835 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/APRHistory.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist.json index a0ed822f..5ad43606 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist.json @@ -304,9 +304,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350" - ] + "args": ["0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350"] }, "implementation": "0xADf8d77A856Ff2267029aCE5dCeD4972c649E683", "devdoc": { @@ -328,4 +326,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Implementation.json index d293e266..0786756e 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Implementation.json @@ -497,4 +497,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Proxy.json index 077c1eae..27dd30fa 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner.json index a8cdf25e..e382d8c5 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x896E3B079aa7A00413c074a5C888f3b96d4d3bcA", - "0x8129fc1c" - ], + "args": ["0x896E3B079aa7A00413c074a5C888f3b96d4d3bcA", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Implementation.json index e6dbd391..5cadba6b 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Implementation.json @@ -415,4 +415,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Proxy.json index c1ce775a..67c90b76 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x896E3B079aa7A00413c074a5C888f3b96d4d3bcA", - "0x8129fc1c" - ], + "args": ["0x896E3B079aa7A00413c074a5C888f3b96d4d3bcA", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause.json index ff16ccbb..540e3343 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350" - ] + "args": ["0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350"] }, "implementation": "0x3F0Ff9947550d7Cf26549136552C785446ad4Ac5", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Implementation.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Implementation.json index b7156a8a..3d65eaec 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Implementation.json @@ -492,4 +492,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Proxy.json b/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Proxy.json index cef83d06..5f0531a1 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LDYStaking.json b/contracts/hardhat/deployments/arbitrumGoerli/LDYStaking.json index f822a80b..68c44ce5 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LDYStaking.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LDYStaking.json @@ -68,4 +68,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler.json b/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler.json index aeff58d2..7f6c5d8f 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350" - ] + "args": ["0xcA55A2394876e7Cf52e99Ab36Fc9151a7d9CF350"] }, "implementation": "0x53f8134F881aCB19dbfcaF46464e1Be55cD2C5D0", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Implementation.json index f2dbfe66..fa090018 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Implementation.json @@ -229,7 +229,9 @@ "blockNumber": 33481080, "transactionHash": "0x24e1780eba9caee7e74e20cf31fc09a671b7a69d6881f0253949ac7de4f4b20c", "address": "0x53f8134F881aCB19dbfcaF46464e1Be55cD2C5D0", - "topics": ["0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"], + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", "logIndex": 0, "blockHash": "0x4a5ce5e3c1782d52755631d66f920d6c7b7424d6e8bbf5e46b59cf1b2012a508" diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Proxy.json index dca4bf32..24713ca9 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LUSDC.json b/contracts/hardhat/deployments/arbitrumGoerli/LUSDC.json index 7e43b2ee..fa7dfce7 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LUSDC.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LUSDC.json @@ -1412,4 +1412,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Implementation.json b/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Implementation.json index b48de731..26ff6590 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Implementation.json @@ -1311,7 +1311,9 @@ "blockNumber": 33481063, "transactionHash": "0x8d5aba10a5b353459a55669b8c37f197801c7e521e89c4f1478e916c8bb2a418", "address": "0x95065a41985796c7b90f117E03306D84693a30FB", - "topics": ["0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"], + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", "logIndex": 0, "blockHash": "0x06044c7a3705ebc9342e1001b6cf403b737bab47ff54f280657af47e5cc55a88" diff --git a/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Proxy.json b/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Proxy.json index 3cec5b76..43406046 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/LUSDC_Proxy.json @@ -153,4 +153,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/Multicall3.json b/contracts/hardhat/deployments/arbitrumGoerli/Multicall3.json index d4e80269..1b324327 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/Multicall3.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/Multicall3.json @@ -589,4 +589,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/arbitrumGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/arbitrumGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/arbitrumGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/arbitrumGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/APRHistory.json b/contracts/hardhat/deployments/baseSepolia/APRHistory.json index 409d970d..aaa476c2 100644 --- a/contracts/hardhat/deployments/baseSepolia/APRHistory.json +++ b/contracts/hardhat/deployments/baseSepolia/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist.json b/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist.json index e8fa000d..52baafa3 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist.json @@ -330,9 +330,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xd42B1065Ac03F3965b11ef19ee98b0165A2C4E53" - ] + "args": ["0xd42B1065Ac03F3965b11ef19ee98b0165A2C4E53"] }, "implementation": "0x67efAe630f0F7faE539B0F1EB1fC1C4cc4dc3e47", "devdoc": { @@ -354,4 +352,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Implementation.json index b06bbf07..3f8cd4e1 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Implementation.json @@ -541,4 +541,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Proxy.json index f75261dd..8d97671b 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalOwner.json b/contracts/hardhat/deployments/baseSepolia/GlobalOwner.json index 95aee630..5272c110 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalOwner.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x0DFF3884ec69cD0B19B8B2bDdEdFbE73801EaD61", - "0x8129fc1c" - ], + "args": ["0x0DFF3884ec69cD0B19B8B2bDdEdFbE73801EaD61", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Implementation.json index 227878bf..dbd3739f 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Proxy.json index 042fe792..0312a3f8 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x0DFF3884ec69cD0B19B8B2bDdEdFbE73801EaD61", - "0x8129fc1c" - ], + "args": ["0x0DFF3884ec69cD0B19B8B2bDdEdFbE73801EaD61", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalPause.json b/contracts/hardhat/deployments/baseSepolia/GlobalPause.json index e03dca7e..7f6cdc33 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalPause.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xd42B1065Ac03F3965b11ef19ee98b0165A2C4E53" - ] + "args": ["0xd42B1065Ac03F3965b11ef19ee98b0165A2C4E53"] }, "implementation": "0x4Ef07549078673e98b16D9C9c2D1319117A166Ab", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalPause_Implementation.json b/contracts/hardhat/deployments/baseSepolia/GlobalPause_Implementation.json index 8825543c..83eee8ba 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/GlobalPause_Proxy.json b/contracts/hardhat/deployments/baseSepolia/GlobalPause_Proxy.json index fa0cd4dc..191ecab2 100644 --- a/contracts/hardhat/deployments/baseSepolia/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/baseSepolia/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LDY.json b/contracts/hardhat/deployments/baseSepolia/LDY.json index f8f18527..f3991c33 100644 --- a/contracts/hardhat/deployments/baseSepolia/LDY.json +++ b/contracts/hardhat/deployments/baseSepolia/LDY.json @@ -482,4 +482,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LDYStaking.json b/contracts/hardhat/deployments/baseSepolia/LDYStaking.json index d4c72e01..04f698b8 100644 --- a/contracts/hardhat/deployments/baseSepolia/LDYStaking.json +++ b/contracts/hardhat/deployments/baseSepolia/LDYStaking.json @@ -1018,22 +1018,10 @@ "0x98002b5c06b44c8769dA3DAe97CA498aB6F97137", "0x8584BCd220A048104e654F842C56E33d37d6aEe3", [ - [ - 0, - 10000 - ], - [ - 2678400, - 40000 - ], - [ - 16070400, - 60000 - ], - [ - 32140800, - 100000 - ] + [0, 10000], + [2678400, 40000], + [16070400, 60000], + [32140800, 100000] ], 32140800, "1000000000000000000000" @@ -1059,4 +1047,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LDYStaking_Implementation.json b/contracts/hardhat/deployments/baseSepolia/LDYStaking_Implementation.json index c2efc66f..45b705a9 100644 --- a/contracts/hardhat/deployments/baseSepolia/LDYStaking_Implementation.json +++ b/contracts/hardhat/deployments/baseSepolia/LDYStaking_Implementation.json @@ -1738,4 +1738,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LDYStaking_Proxy.json b/contracts/hardhat/deployments/baseSepolia/LDYStaking_Proxy.json index 1c33171f..4303fe57 100644 --- a/contracts/hardhat/deployments/baseSepolia/LDYStaking_Proxy.json +++ b/contracts/hardhat/deployments/baseSepolia/LDYStaking_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LTokenSignaler.json b/contracts/hardhat/deployments/baseSepolia/LTokenSignaler.json index 46e20799..b7bb9cde 100644 --- a/contracts/hardhat/deployments/baseSepolia/LTokenSignaler.json +++ b/contracts/hardhat/deployments/baseSepolia/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xd42B1065Ac03F3965b11ef19ee98b0165A2C4E53" - ] + "args": ["0xd42B1065Ac03F3965b11ef19ee98b0165A2C4E53"] }, "implementation": "0x189073F3D50C637125a8B82C3afD39437a8E3FD3", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Implementation.json index 69f259d1..0eba7886 100644 --- a/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Proxy.json index eddaa53f..1f648344 100644 --- a/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/baseSepolia/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LUSDC.json b/contracts/hardhat/deployments/baseSepolia/LUSDC.json index a9dd9574..7716c161 100644 --- a/contracts/hardhat/deployments/baseSepolia/LUSDC.json +++ b/contracts/hardhat/deployments/baseSepolia/LUSDC.json @@ -1443,4 +1443,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LUSDC_Implementation.json b/contracts/hardhat/deployments/baseSepolia/LUSDC_Implementation.json index 0f0d8491..17a59153 100644 --- a/contracts/hardhat/deployments/baseSepolia/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/baseSepolia/LUSDC_Implementation.json @@ -2559,4 +2559,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/LUSDC_Proxy.json b/contracts/hardhat/deployments/baseSepolia/LUSDC_Proxy.json index 1a895b1c..e3882f65 100644 --- a/contracts/hardhat/deployments/baseSepolia/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/baseSepolia/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/baseSepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/baseSepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/baseSepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/baseSepolia/solcInputs/1d9f98e9f73009a42653e1abaf15e178.json b/contracts/hardhat/deployments/baseSepolia/solcInputs/1d9f98e9f73009a42653e1abaf15e178.json index 69b2d07c..0c594179 100644 --- a/contracts/hardhat/deployments/baseSepolia/solcInputs/1d9f98e9f73009a42653e1abaf15e178.json +++ b/contracts/hardhat/deployments/baseSepolia/solcInputs/1d9f98e9f73009a42653e1abaf15e178.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/APRHistory.json b/contracts/hardhat/deployments/linea/APRHistory.json index d056aaf7..91250cc1 100644 --- a/contracts/hardhat/deployments/linea/APRHistory.json +++ b/contracts/hardhat/deployments/linea/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalBlacklist.json b/contracts/hardhat/deployments/linea/GlobalBlacklist.json index f1e22f65..124f513a 100644 --- a/contracts/hardhat/deployments/linea/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/linea/GlobalBlacklist.json @@ -304,9 +304,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe4Af4573bFc5F04D8b84c61744de8A94059f2462" - ] + "args": ["0xe4Af4573bFc5F04D8b84c61744de8A94059f2462"] }, "implementation": "0x896E3B079aa7A00413c074a5C888f3b96d4d3bcA", "devdoc": { @@ -328,4 +326,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/linea/GlobalBlacklist_Implementation.json index 3fb1b5a7..8eba95a9 100644 --- a/contracts/hardhat/deployments/linea/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/linea/GlobalBlacklist_Implementation.json @@ -509,4 +509,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/linea/GlobalBlacklist_Proxy.json index a9c9a7f0..4ffb453f 100644 --- a/contracts/hardhat/deployments/linea/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/linea/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalOwner.json b/contracts/hardhat/deployments/linea/GlobalOwner.json index dfae94c0..a45f82d5 100644 --- a/contracts/hardhat/deployments/linea/GlobalOwner.json +++ b/contracts/hardhat/deployments/linea/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", - "0x8129fc1c" - ], + "args": ["0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/linea/GlobalOwner_Implementation.json index cc9571b2..40bb8324 100644 --- a/contracts/hardhat/deployments/linea/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/linea/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/linea/GlobalOwner_Proxy.json index 09de04aa..a32f9df1 100644 --- a/contracts/hardhat/deployments/linea/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/linea/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", - "0x8129fc1c" - ], + "args": ["0x36811e4b6d5f890bd0ac858B69499F9a7b2dc05F", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalPause.json b/contracts/hardhat/deployments/linea/GlobalPause.json index 9c381deb..28366129 100644 --- a/contracts/hardhat/deployments/linea/GlobalPause.json +++ b/contracts/hardhat/deployments/linea/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe4Af4573bFc5F04D8b84c61744de8A94059f2462" - ] + "args": ["0xe4Af4573bFc5F04D8b84c61744de8A94059f2462"] }, "implementation": "0xd4568D313FA2d5C6EBA37C9f30F6FB8D1C552ddd", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalPause_Implementation.json b/contracts/hardhat/deployments/linea/GlobalPause_Implementation.json index 3821674b..2fe151cc 100644 --- a/contracts/hardhat/deployments/linea/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/linea/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/GlobalPause_Proxy.json b/contracts/hardhat/deployments/linea/GlobalPause_Proxy.json index c0998533..d7f02ebe 100644 --- a/contracts/hardhat/deployments/linea/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/linea/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LDYStaking.json b/contracts/hardhat/deployments/linea/LDYStaking.json index 566c99e3..bfc18b38 100644 --- a/contracts/hardhat/deployments/linea/LDYStaking.json +++ b/contracts/hardhat/deployments/linea/LDYStaking.json @@ -287,4 +287,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LTokenSignaler.json b/contracts/hardhat/deployments/linea/LTokenSignaler.json index dc2b6bbe..5111f756 100644 --- a/contracts/hardhat/deployments/linea/LTokenSignaler.json +++ b/contracts/hardhat/deployments/linea/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe4Af4573bFc5F04D8b84c61744de8A94059f2462" - ] + "args": ["0xe4Af4573bFc5F04D8b84c61744de8A94059f2462"] }, "implementation": "0xEEe2CA6f97aC13D2D0dF1a2d45fC9ec30939c331", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/linea/LTokenSignaler_Implementation.json index 6415f49b..f83312c7 100644 --- a/contracts/hardhat/deployments/linea/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/linea/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/linea/LTokenSignaler_Proxy.json index 2ccf4feb..4c09fd38 100644 --- a/contracts/hardhat/deployments/linea/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/linea/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LUSDC.json b/contracts/hardhat/deployments/linea/LUSDC.json index 15e810b9..31d13c74 100644 --- a/contracts/hardhat/deployments/linea/LUSDC.json +++ b/contracts/hardhat/deployments/linea/LUSDC.json @@ -1400,4 +1400,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LUSDC_Implementation.json b/contracts/hardhat/deployments/linea/LUSDC_Implementation.json index cda1c486..367a5a2b 100644 --- a/contracts/hardhat/deployments/linea/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/linea/LUSDC_Implementation.json @@ -2502,4 +2502,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/LUSDC_Proxy.json b/contracts/hardhat/deployments/linea/LUSDC_Proxy.json index 24c8dc80..86ed6d14 100644 --- a/contracts/hardhat/deployments/linea/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/linea/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/PreMining.json b/contracts/hardhat/deployments/linea/PreMining.json index a22c8a99..07a81c28 100644 --- a/contracts/hardhat/deployments/linea/PreMining.json +++ b/contracts/hardhat/deployments/linea/PreMining.json @@ -1036,4 +1036,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/linea/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/linea/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/linea/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/linea/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json b/contracts/hardhat/deployments/linea/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json index 7cb2101f..05fae2a0 100644 --- a/contracts/hardhat/deployments/linea/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json +++ b/contracts/hardhat/deployments/linea/solcInputs/dc8ab559aece0ac66bb51397f43ade15.json @@ -63,13 +63,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/APRHistory.json b/contracts/hardhat/deployments/lineaGoerli/APRHistory.json index e67b6145..c51ca4c4 100644 --- a/contracts/hardhat/deployments/lineaGoerli/APRHistory.json +++ b/contracts/hardhat/deployments/lineaGoerli/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist.json b/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist.json index 086c8de8..25cde3d7 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist.json @@ -304,9 +304,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xDbac01A784fB7E5F1Ae9c8d61f776A2d9d59faB6" - ] + "args": ["0xDbac01A784fB7E5F1Ae9c8d61f776A2d9d59faB6"] }, "implementation": "0x13B0722ce74587bAAc4C3069901496D4A94f90d2", "devdoc": { @@ -328,4 +326,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Implementation.json index 8947224a..760c3701 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Implementation.json @@ -497,4 +497,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Proxy.json index da667cb9..d4ac330f 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalOwner.json b/contracts/hardhat/deployments/lineaGoerli/GlobalOwner.json index 0dab28f7..b0411d75 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalOwner.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x158b8b830C5f021Fb853E5124bC4f0F9f3c146c3", - "0x8129fc1c" - ], + "args": ["0x158b8b830C5f021Fb853E5124bC4f0F9f3c146c3", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Implementation.json index f2d03c03..5ce98baa 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Implementation.json @@ -415,4 +415,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Proxy.json index e8ba28ea..55aaafc3 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x158b8b830C5f021Fb853E5124bC4f0F9f3c146c3", - "0x8129fc1c" - ], + "args": ["0x158b8b830C5f021Fb853E5124bC4f0F9f3c146c3", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalPause.json b/contracts/hardhat/deployments/lineaGoerli/GlobalPause.json index ff2fde79..4773e067 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalPause.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xDbac01A784fB7E5F1Ae9c8d61f776A2d9d59faB6" - ] + "args": ["0xDbac01A784fB7E5F1Ae9c8d61f776A2d9d59faB6"] }, "implementation": "0x61Ecdf96b567B081A098Aee0B63157bD79482593", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Implementation.json b/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Implementation.json index fd87991f..18b83e1a 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Implementation.json @@ -492,4 +492,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Proxy.json b/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Proxy.json index 49970bc5..ab2374c3 100644 --- a/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/lineaGoerli/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/LDYStaking.json b/contracts/hardhat/deployments/lineaGoerli/LDYStaking.json index 9839e3a7..75c567bb 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LDYStaking.json +++ b/contracts/hardhat/deployments/lineaGoerli/LDYStaking.json @@ -68,4 +68,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler.json b/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler.json index 2b5d90d5..3dc93a3d 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler.json +++ b/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xDbac01A784fB7E5F1Ae9c8d61f776A2d9d59faB6" - ] + "args": ["0xDbac01A784fB7E5F1Ae9c8d61f776A2d9d59faB6"] }, "implementation": "0xc691ba2ee970D42dD3fA52777a5416181c3F8C3d", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Implementation.json index 3b766cd6..f5f3f502 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Implementation.json @@ -229,7 +229,9 @@ "blockNumber": 1317625, "transactionHash": "0xfa39ac1d6cc5be713a06257322800a86857c50fe4c5a4470300c4f950515ff0f", "address": "0xc691ba2ee970D42dD3fA52777a5416181c3F8C3d", - "topics": ["0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"], + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", "logIndex": 0, "blockHash": "0xad8e57c8ad274bf749aebe8e4dde3bc57d4dea54beb243b7e41794e2125cd558" diff --git a/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Proxy.json index 3340b784..00c4a067 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/lineaGoerli/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/LUSDC.json b/contracts/hardhat/deployments/lineaGoerli/LUSDC.json index b0e82dd7..c40b18f4 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LUSDC.json +++ b/contracts/hardhat/deployments/lineaGoerli/LUSDC.json @@ -1412,4 +1412,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/LUSDC_Implementation.json b/contracts/hardhat/deployments/lineaGoerli/LUSDC_Implementation.json index cb3d2993..4a91c8d1 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/lineaGoerli/LUSDC_Implementation.json @@ -1311,7 +1311,9 @@ "blockNumber": 1317623, "transactionHash": "0x8a7548061089c819d0ca1ed94efbe4efbe7da5566a1ef742c9ddd5c58bd77f78", "address": "0x89123270815c60494aC0Add366A9b1AC184C6183", - "topics": ["0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"], + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", "logIndex": 0, "blockHash": "0x18f5fe6409c68db095c06a3f3119a79416476607f630179807a0937fd20a0abd" diff --git a/contracts/hardhat/deployments/lineaGoerli/LUSDC_Proxy.json b/contracts/hardhat/deployments/lineaGoerli/LUSDC_Proxy.json index 4571524a..d3c27ac6 100644 --- a/contracts/hardhat/deployments/lineaGoerli/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/lineaGoerli/LUSDC_Proxy.json @@ -153,4 +153,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/lineaGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/lineaGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/lineaGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/lineaGoerli/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/APRHistory.json b/contracts/hardhat/deployments/localhost/APRHistory.json index c3763256..62b19a73 100644 --- a/contracts/hardhat/deployments/localhost/APRHistory.json +++ b/contracts/hardhat/deployments/localhost/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalBlacklist.json b/contracts/hardhat/deployments/localhost/GlobalBlacklist.json index 12b66fd0..590237d2 100644 --- a/contracts/hardhat/deployments/localhost/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/localhost/GlobalBlacklist.json @@ -330,9 +330,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" - ] + "args": ["0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"] }, "implementation": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", "devdoc": { @@ -354,4 +352,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/localhost/GlobalBlacklist_Implementation.json index 25ef867c..ac3a1c75 100644 --- a/contracts/hardhat/deployments/localhost/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/localhost/GlobalBlacklist_Implementation.json @@ -541,4 +541,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/localhost/GlobalBlacklist_Proxy.json index fbaa2853..2114e934 100644 --- a/contracts/hardhat/deployments/localhost/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/localhost/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalOwner.json b/contracts/hardhat/deployments/localhost/GlobalOwner.json index a35891da..2c4dedbe 100644 --- a/contracts/hardhat/deployments/localhost/GlobalOwner.json +++ b/contracts/hardhat/deployments/localhost/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "0x8129fc1c" - ], + "args": ["0x5FbDB2315678afecb367f032d93F642f64180aa3", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/localhost/GlobalOwner_Implementation.json index 8cc78997..30bab116 100644 --- a/contracts/hardhat/deployments/localhost/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/localhost/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/localhost/GlobalOwner_Proxy.json index be2b5880..8ba17155 100644 --- a/contracts/hardhat/deployments/localhost/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/localhost/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "0x8129fc1c" - ], + "args": ["0x5FbDB2315678afecb367f032d93F642f64180aa3", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalPause.json b/contracts/hardhat/deployments/localhost/GlobalPause.json index cf8f0e9b..7c10a8fd 100644 --- a/contracts/hardhat/deployments/localhost/GlobalPause.json +++ b/contracts/hardhat/deployments/localhost/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" - ] + "args": ["0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"] }, "implementation": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalPause_Implementation.json b/contracts/hardhat/deployments/localhost/GlobalPause_Implementation.json index 0d6b1027..d0368674 100644 --- a/contracts/hardhat/deployments/localhost/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/localhost/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/GlobalPause_Proxy.json b/contracts/hardhat/deployments/localhost/GlobalPause_Proxy.json index b5a580a9..f22dd9a5 100644 --- a/contracts/hardhat/deployments/localhost/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/localhost/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LDYStaking.json b/contracts/hardhat/deployments/localhost/LDYStaking.json index ef5c95cc..add0f046 100644 --- a/contracts/hardhat/deployments/localhost/LDYStaking.json +++ b/contracts/hardhat/deployments/localhost/LDYStaking.json @@ -287,4 +287,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LTokenSignaler.json b/contracts/hardhat/deployments/localhost/LTokenSignaler.json index 0e34f311..ff87932e 100644 --- a/contracts/hardhat/deployments/localhost/LTokenSignaler.json +++ b/contracts/hardhat/deployments/localhost/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" - ] + "args": ["0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"] }, "implementation": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/localhost/LTokenSignaler_Implementation.json index 8a96f819..7824f3a7 100644 --- a/contracts/hardhat/deployments/localhost/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/localhost/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/localhost/LTokenSignaler_Proxy.json index c33d3a4b..184e9cdd 100644 --- a/contracts/hardhat/deployments/localhost/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/localhost/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LUSDC.json b/contracts/hardhat/deployments/localhost/LUSDC.json index 65871fc3..8c4b5cd1 100644 --- a/contracts/hardhat/deployments/localhost/LUSDC.json +++ b/contracts/hardhat/deployments/localhost/LUSDC.json @@ -1406,4 +1406,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LUSDC_Implementation.json b/contracts/hardhat/deployments/localhost/LUSDC_Implementation.json index 1cb5b99a..81cbb555 100644 --- a/contracts/hardhat/deployments/localhost/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/localhost/LUSDC_Implementation.json @@ -2502,4 +2502,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/LUSDC_Proxy.json b/contracts/hardhat/deployments/localhost/LUSDC_Proxy.json index a4e8aa15..22590bd1 100644 --- a/contracts/hardhat/deployments/localhost/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/localhost/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/USDC.json b/contracts/hardhat/deployments/localhost/USDC.json index 362dd966..4c44b378 100644 --- a/contracts/hardhat/deployments/localhost/USDC.json +++ b/contracts/hardhat/deployments/localhost/USDC.json @@ -366,11 +366,7 @@ "status": 1, "byzantium": true }, - "args": [ - "Fake USDC", - "USDC", - 6 - ], + "args": ["Fake USDC", "USDC", 6], "numDeployments": 1, "solcInputHash": "616c2bbfbbb38e0f66e1812240dc44b0", "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"name\":\"setDecimals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setDecimals(uint8)\":{\"notice\":\"Used in tests to test different decimals scenarios.\"}},\"notice\":\"Used for testing purposes only, and used to generate ABIs for Wagmi contracts calls. It represents: - a FIAT-based stablecoin when used to test the LToken contract, - the $LDY token when used to test the LDYStaking contract. This contract accept decimals as constructor argument, so it can be used to to easily test different decimals scenarios.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/src/GenericERC20.sol\":\"GenericERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20.sol\\\";\\nimport \\\"../../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20Burnable is Context, ERC20 {\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n}\\n\",\"keccak256\":\"0x0d19410453cda55960a818e02bd7c18952a5c8fe7a3036e81f0d599f34487a7b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/src/GenericERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.18;\\n\\nimport {ERC20} from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport {ERC20Burnable} from \\\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\\\";\\n\\n/**\\n * @notice Used for testing purposes only, and used to generate ABIs for Wagmi contracts calls.\\n * It represents:\\n * - a FIAT-based stablecoin when used to test the LToken contract,\\n * - the $LDY token when used to test the LDYStaking contract.\\n * This contract accept decimals as constructor argument, so it can be used to to\\n * easily test different decimals scenarios.\\n */\\ncontract GenericERC20 is ERC20, ERC20Burnable {\\n uint8 private _decimals;\\n\\n constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) {\\n _decimals = decimals_;\\n }\\n\\n function mint(uint256 amount) public {\\n _mint(msg.sender, amount);\\n }\\n\\n function decimals() public view virtual override returns (uint8) {\\n return _decimals;\\n }\\n\\n /**\\n * Used in tests to test different decimals scenarios.\\n */\\n function setDecimals(uint8 decimals_) public {\\n _decimals = decimals_;\\n }\\n}\\n\",\"keccak256\":\"0x6c041437008dd8d1dece8f784e02ad8c17a403dbde82f7dcb54abb39cd7b363a\",\"license\":\"MIT\"}},\"version\":1}", @@ -527,4 +523,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/localhost/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/localhost/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/localhost/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/localhost/solcInputs/616c2bbfbbb38e0f66e1812240dc44b0.json b/contracts/hardhat/deployments/localhost/solcInputs/616c2bbfbbb38e0f66e1812240dc44b0.json index 27f11f2e..725d183b 100644 --- a/contracts/hardhat/deployments/localhost/solcInputs/616c2bbfbbb38e0f66e1812240dc44b0.json +++ b/contracts/hardhat/deployments/localhost/solcInputs/616c2bbfbbb38e0f66e1812240dc44b0.json @@ -164,13 +164,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalBlacklist.json b/contracts/hardhat/deployments/mainnet/GlobalBlacklist.json index fe8e095c..c7482d92 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/mainnet/GlobalBlacklist.json @@ -330,9 +330,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x730C21c81F2baaDEB54daD63050D42474a824900" - ] + "args": ["0x730C21c81F2baaDEB54daD63050D42474a824900"] }, "implementation": "0x1991a5BfCC94269E7ADc1363B606535d52e34B50", "devdoc": { @@ -354,4 +352,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Implementation.json index d7373f78..5c85eb37 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Implementation.json @@ -541,4 +541,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Proxy.json index e37af2f5..60362b95 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/mainnet/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalOwner.json b/contracts/hardhat/deployments/mainnet/GlobalOwner.json index 9b10a536..a5b6c66b 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalOwner.json +++ b/contracts/hardhat/deployments/mainnet/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x42BcCB90eCCDAe96F6435C82eEfdD2DA577659fc", - "0x8129fc1c" - ], + "args": ["0x42BcCB90eCCDAe96F6435C82eEfdD2DA577659fc", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/mainnet/GlobalOwner_Implementation.json index a242d2ec..7b1bf262 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/mainnet/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/mainnet/GlobalOwner_Proxy.json index 7b7eb1ce..9edcb684 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/mainnet/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x42BcCB90eCCDAe96F6435C82eEfdD2DA577659fc", - "0x8129fc1c" - ], + "args": ["0x42BcCB90eCCDAe96F6435C82eEfdD2DA577659fc", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalPause.json b/contracts/hardhat/deployments/mainnet/GlobalPause.json index 260af8bb..191fdbee 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalPause.json +++ b/contracts/hardhat/deployments/mainnet/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x730C21c81F2baaDEB54daD63050D42474a824900" - ] + "args": ["0x730C21c81F2baaDEB54daD63050D42474a824900"] }, "implementation": "0xC27EEc1c192500DaA517D491f673eD81008a8c0b", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalPause_Implementation.json b/contracts/hardhat/deployments/mainnet/GlobalPause_Implementation.json index 08daec7b..1fa8b9f3 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/mainnet/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/GlobalPause_Proxy.json b/contracts/hardhat/deployments/mainnet/GlobalPause_Proxy.json index fcf2291e..ec5e6db6 100644 --- a/contracts/hardhat/deployments/mainnet/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/mainnet/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/LDYStaking.json b/contracts/hardhat/deployments/mainnet/LDYStaking.json index 247fc63f..68a425fa 100644 --- a/contracts/hardhat/deployments/mainnet/LDYStaking.json +++ b/contracts/hardhat/deployments/mainnet/LDYStaking.json @@ -1018,22 +1018,10 @@ "0xFC71827E981Fe166299736f1A1CCc4f5d3a2597E", "0x482dF7483a52496F4C65AB499966dfcdf4DDFDbc", [ - [ - 0, - 10000 - ], - [ - 2678400, - 40000 - ], - [ - 16070400, - 60000 - ], - [ - 32140800, - 100000 - ] + [0, 10000], + [2678400, 40000], + [16070400, 60000], + [32140800, 100000] ], 32140800, "1000000000000000000000" @@ -1059,4 +1047,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/LDYStaking_Implementation.json b/contracts/hardhat/deployments/mainnet/LDYStaking_Implementation.json index c64de367..80345ed4 100644 --- a/contracts/hardhat/deployments/mainnet/LDYStaking_Implementation.json +++ b/contracts/hardhat/deployments/mainnet/LDYStaking_Implementation.json @@ -1738,4 +1738,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/LDYStaking_Proxy.json b/contracts/hardhat/deployments/mainnet/LDYStaking_Proxy.json index 8a55a828..420cad0a 100644 --- a/contracts/hardhat/deployments/mainnet/LDYStaking_Proxy.json +++ b/contracts/hardhat/deployments/mainnet/LDYStaking_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/mainnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/mainnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/mainnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json b/contracts/hardhat/deployments/mainnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json index 17f1c36b..3a66115a 100644 --- a/contracts/hardhat/deployments/mainnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json +++ b/contracts/hardhat/deployments/mainnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/mainnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json b/contracts/hardhat/deployments/mainnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json index 54faa9f3..d190fcdb 100644 --- a/contracts/hardhat/deployments/mainnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json +++ b/contracts/hardhat/deployments/mainnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/APRHistory.json b/contracts/hardhat/deployments/sepolia/APRHistory.json index a913454a..16a304c1 100644 --- a/contracts/hardhat/deployments/sepolia/APRHistory.json +++ b/contracts/hardhat/deployments/sepolia/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalBlacklist.json b/contracts/hardhat/deployments/sepolia/GlobalBlacklist.json index 97ea0922..6da2c12a 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/sepolia/GlobalBlacklist.json @@ -330,9 +330,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x91849bAe327965a5Cc7BA970233dBee10C610105" - ] + "args": ["0x91849bAe327965a5Cc7BA970233dBee10C610105"] }, "implementation": "0x7860dA94d71f45e53f9aC3b55c264faE84B6de7B", "devdoc": { @@ -354,4 +352,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Implementation.json index c5d1c56c..68a73285 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Implementation.json @@ -541,4 +541,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Proxy.json index 68d7a5e3..ea769b53 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/sepolia/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalOwner.json b/contracts/hardhat/deployments/sepolia/GlobalOwner.json index 880f3724..f865f1d6 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalOwner.json +++ b/contracts/hardhat/deployments/sepolia/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x2f91828257C070bB2Be9b80B38eb4F1f7B7a9dD8", - "0x8129fc1c" - ], + "args": ["0x2f91828257C070bB2Be9b80B38eb4F1f7B7a9dD8", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/sepolia/GlobalOwner_Implementation.json index 2ad216bb..18828f9e 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/sepolia/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/sepolia/GlobalOwner_Proxy.json index 2fcf227c..b3cfda42 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/sepolia/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0x2f91828257C070bB2Be9b80B38eb4F1f7B7a9dD8", - "0x8129fc1c" - ], + "args": ["0x2f91828257C070bB2Be9b80B38eb4F1f7B7a9dD8", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalPause.json b/contracts/hardhat/deployments/sepolia/GlobalPause.json index 12246497..cde41186 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalPause.json +++ b/contracts/hardhat/deployments/sepolia/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x91849bAe327965a5Cc7BA970233dBee10C610105" - ] + "args": ["0x91849bAe327965a5Cc7BA970233dBee10C610105"] }, "implementation": "0x37f72796e19cb832d3f34a56be312fC1Bce0F8Ed", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalPause_Implementation.json b/contracts/hardhat/deployments/sepolia/GlobalPause_Implementation.json index 098c9422..9084e440 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/sepolia/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/GlobalPause_Proxy.json b/contracts/hardhat/deployments/sepolia/GlobalPause_Proxy.json index 5962cc0e..9c93c508 100644 --- a/contracts/hardhat/deployments/sepolia/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/sepolia/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LDY.json b/contracts/hardhat/deployments/sepolia/LDY.json index cdfbf94b..a53ae13a 100644 --- a/contracts/hardhat/deployments/sepolia/LDY.json +++ b/contracts/hardhat/deployments/sepolia/LDY.json @@ -482,4 +482,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LDYStaking.json b/contracts/hardhat/deployments/sepolia/LDYStaking.json index 9349a053..bb8b513b 100644 --- a/contracts/hardhat/deployments/sepolia/LDYStaking.json +++ b/contracts/hardhat/deployments/sepolia/LDYStaking.json @@ -1018,22 +1018,10 @@ "0xf7d04d50F3EC180173CEFc73EB5427aeFC9f5fF1", "0xD57baAf94696F178804fBFB2345c977C40F20266", [ - [ - 0, - 10000 - ], - [ - 2678400, - 40000 - ], - [ - 16070400, - 60000 - ], - [ - 32140800, - 100000 - ] + [0, 10000], + [2678400, 40000], + [16070400, 60000], + [32140800, 100000] ], 32140800, "1000000000000000000000" @@ -1059,4 +1047,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LDYStaking_Implementation.json b/contracts/hardhat/deployments/sepolia/LDYStaking_Implementation.json index b6bd1e20..a3b6019d 100644 --- a/contracts/hardhat/deployments/sepolia/LDYStaking_Implementation.json +++ b/contracts/hardhat/deployments/sepolia/LDYStaking_Implementation.json @@ -1738,4 +1738,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LDYStaking_Proxy.json b/contracts/hardhat/deployments/sepolia/LDYStaking_Proxy.json index 59f8257c..41af783b 100644 --- a/contracts/hardhat/deployments/sepolia/LDYStaking_Proxy.json +++ b/contracts/hardhat/deployments/sepolia/LDYStaking_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LTokenSignaler.json b/contracts/hardhat/deployments/sepolia/LTokenSignaler.json index c277b2b5..50d246b1 100644 --- a/contracts/hardhat/deployments/sepolia/LTokenSignaler.json +++ b/contracts/hardhat/deployments/sepolia/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x91849bAe327965a5Cc7BA970233dBee10C610105" - ] + "args": ["0x91849bAe327965a5Cc7BA970233dBee10C610105"] }, "implementation": "0x0D093878941ea1beFF5D7363d865e1B6e62C71a8", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/sepolia/LTokenSignaler_Implementation.json index d093cb5d..89c6e786 100644 --- a/contracts/hardhat/deployments/sepolia/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/sepolia/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/sepolia/LTokenSignaler_Proxy.json index f3c75963..1dfdc27c 100644 --- a/contracts/hardhat/deployments/sepolia/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/sepolia/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LUSDC.json b/contracts/hardhat/deployments/sepolia/LUSDC.json index 41ad1a3b..e2eb53c1 100644 --- a/contracts/hardhat/deployments/sepolia/LUSDC.json +++ b/contracts/hardhat/deployments/sepolia/LUSDC.json @@ -1396,4 +1396,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LUSDC_Implementation.json b/contracts/hardhat/deployments/sepolia/LUSDC_Implementation.json index 72df3fa3..e5394362 100644 --- a/contracts/hardhat/deployments/sepolia/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/sepolia/LUSDC_Implementation.json @@ -2502,4 +2502,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/LUSDC_Proxy.json b/contracts/hardhat/deployments/sepolia/LUSDC_Proxy.json index 64c2d82a..23f88c38 100644 --- a/contracts/hardhat/deployments/sepolia/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/sepolia/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/182a16974b15eca6ab6e31776c34b4a3.json b/contracts/hardhat/deployments/sepolia/solcInputs/182a16974b15eca6ab6e31776c34b4a3.json index ec7828c1..65af034b 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/182a16974b15eca6ab6e31776c34b4a3.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/182a16974b15eca6ab6e31776c34b4a3.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/77252ae545c4d734665a9c3f89121ce4.json b/contracts/hardhat/deployments/sepolia/solcInputs/77252ae545c4d734665a9c3f89121ce4.json index 09b1a750..3da9d406 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/77252ae545c4d734665a9c3f89121ce4.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/77252ae545c4d734665a9c3f89121ce4.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/851bca7bcae1175170e3def49d0b02e4.json b/contracts/hardhat/deployments/sepolia/solcInputs/851bca7bcae1175170e3def49d0b02e4.json index 17f1c36b..3a66115a 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/851bca7bcae1175170e3def49d0b02e4.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/851bca7bcae1175170e3def49d0b02e4.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/9ca0455f65fc1ab673cc6299d95ef514.json b/contracts/hardhat/deployments/sepolia/solcInputs/9ca0455f65fc1ab673cc6299d95ef514.json index 18351a27..b0a61b7d 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/9ca0455f65fc1ab673cc6299d95ef514.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/9ca0455f65fc1ab673cc6299d95ef514.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json b/contracts/hardhat/deployments/sepolia/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json index 54faa9f3..d190fcdb 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/sepolia/solcInputs/cac3151645765bd32074de7715ff5b62.json b/contracts/hardhat/deployments/sepolia/solcInputs/cac3151645765bd32074de7715ff5b62.json index 74e0f6e2..e38f5bb1 100644 --- a/contracts/hardhat/deployments/sepolia/solcInputs/cac3151645765bd32074de7715ff5b62.json +++ b/contracts/hardhat/deployments/sepolia/solcInputs/cac3151645765bd32074de7715ff5b62.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/APRHistory.json b/contracts/hardhat/deployments/xlayer/APRHistory.json index 4baef311..1dd2b0f3 100644 --- a/contracts/hardhat/deployments/xlayer/APRHistory.json +++ b/contracts/hardhat/deployments/xlayer/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalBlacklist.json b/contracts/hardhat/deployments/xlayer/GlobalBlacklist.json index 8cb1e597..6155d442 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/xlayer/GlobalBlacklist.json @@ -330,9 +330,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x4717bca6978f1BCAb59b7bc0B6849aba6062834c" - ] + "args": ["0x4717bca6978f1BCAb59b7bc0B6849aba6062834c"] }, "implementation": "0x5c437a38762b1608336De75C2BD35eEC59137ab4", "devdoc": { @@ -354,4 +352,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Implementation.json index 76f1ea8a..7643fac5 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Implementation.json @@ -541,4 +541,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Proxy.json index b138a00b..ede88a45 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/xlayer/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalOwner.json b/contracts/hardhat/deployments/xlayer/GlobalOwner.json index 65a3008f..9bca3b94 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalOwner.json +++ b/contracts/hardhat/deployments/xlayer/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", - "0x8129fc1c" - ], + "args": ["0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/xlayer/GlobalOwner_Implementation.json index d1373ddb..d29d991f 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/xlayer/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/xlayer/GlobalOwner_Proxy.json index 378fc863..bc774923 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/xlayer/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", - "0x8129fc1c" - ], + "args": ["0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalPause.json b/contracts/hardhat/deployments/xlayer/GlobalPause.json index b56d2ba4..9a8610c9 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalPause.json +++ b/contracts/hardhat/deployments/xlayer/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x4717bca6978f1BCAb59b7bc0B6849aba6062834c" - ] + "args": ["0x4717bca6978f1BCAb59b7bc0B6849aba6062834c"] }, "implementation": "0xa54563C0AD02F50d18D65Fed3e850DF03C80dD34", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalPause_Implementation.json b/contracts/hardhat/deployments/xlayer/GlobalPause_Implementation.json index ab744d9b..671b2dbe 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/xlayer/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/GlobalPause_Proxy.json b/contracts/hardhat/deployments/xlayer/GlobalPause_Proxy.json index 8e53d88c..09287f65 100644 --- a/contracts/hardhat/deployments/xlayer/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/xlayer/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LDY.json b/contracts/hardhat/deployments/xlayer/LDY.json index 5dd005fa..fffa222c 100644 --- a/contracts/hardhat/deployments/xlayer/LDY.json +++ b/contracts/hardhat/deployments/xlayer/LDY.json @@ -482,4 +482,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LDYStaking.json b/contracts/hardhat/deployments/xlayer/LDYStaking.json index 880c2760..d2fea60d 100644 --- a/contracts/hardhat/deployments/xlayer/LDYStaking.json +++ b/contracts/hardhat/deployments/xlayer/LDYStaking.json @@ -1018,22 +1018,10 @@ "0x9bD7AF4a9Af603A0f4f53d39Ab2a97Cea7E4A7e6", "0x39c54346eFA8e38FBC7B4daB3dc9B61D76e80e3b", [ - [ - 0, - 10000 - ], - [ - 2678400, - 40000 - ], - [ - 16070400, - 60000 - ], - [ - 32140800, - 100000 - ] + [0, 10000], + [2678400, 40000], + [16070400, 60000], + [32140800, 100000] ], 32140800, "1000000000000000000000" @@ -1059,4 +1047,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LDYStaking_Implementation.json b/contracts/hardhat/deployments/xlayer/LDYStaking_Implementation.json index db979f22..b8dd59c7 100644 --- a/contracts/hardhat/deployments/xlayer/LDYStaking_Implementation.json +++ b/contracts/hardhat/deployments/xlayer/LDYStaking_Implementation.json @@ -1738,4 +1738,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LDYStaking_Proxy.json b/contracts/hardhat/deployments/xlayer/LDYStaking_Proxy.json index ad53ecf6..5ca7c54f 100644 --- a/contracts/hardhat/deployments/xlayer/LDYStaking_Proxy.json +++ b/contracts/hardhat/deployments/xlayer/LDYStaking_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LTokenSignaler.json b/contracts/hardhat/deployments/xlayer/LTokenSignaler.json index 87ced82b..f6c1281c 100644 --- a/contracts/hardhat/deployments/xlayer/LTokenSignaler.json +++ b/contracts/hardhat/deployments/xlayer/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x4717bca6978f1BCAb59b7bc0B6849aba6062834c" - ] + "args": ["0x4717bca6978f1BCAb59b7bc0B6849aba6062834c"] }, "implementation": "0xc212584379262dCAE89227cb73ED4fF11952B323", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/xlayer/LTokenSignaler_Implementation.json index b75b4e52..366b5e02 100644 --- a/contracts/hardhat/deployments/xlayer/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/xlayer/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/xlayer/LTokenSignaler_Proxy.json index 630ad0cc..d55d599c 100644 --- a/contracts/hardhat/deployments/xlayer/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/xlayer/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LUSDC.json b/contracts/hardhat/deployments/xlayer/LUSDC.json index c88637b6..a015e654 100644 --- a/contracts/hardhat/deployments/xlayer/LUSDC.json +++ b/contracts/hardhat/deployments/xlayer/LUSDC.json @@ -1406,4 +1406,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LUSDC_Implementation.json b/contracts/hardhat/deployments/xlayer/LUSDC_Implementation.json index ece44ca0..315cdf7a 100644 --- a/contracts/hardhat/deployments/xlayer/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/xlayer/LUSDC_Implementation.json @@ -2502,4 +2502,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/LUSDC_Proxy.json b/contracts/hardhat/deployments/xlayer/LUSDC_Proxy.json index 807646bf..fd6886a3 100644 --- a/contracts/hardhat/deployments/xlayer/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/xlayer/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/xlayer/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/xlayer/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/xlayer/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/solcInputs/851bca7bcae1175170e3def49d0b02e4.json b/contracts/hardhat/deployments/xlayer/solcInputs/851bca7bcae1175170e3def49d0b02e4.json index 17f1c36b..3a66115a 100644 --- a/contracts/hardhat/deployments/xlayer/solcInputs/851bca7bcae1175170e3def49d0b02e4.json +++ b/contracts/hardhat/deployments/xlayer/solcInputs/851bca7bcae1175170e3def49d0b02e4.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json b/contracts/hardhat/deployments/xlayer/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json index 54faa9f3..d190fcdb 100644 --- a/contracts/hardhat/deployments/xlayer/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json +++ b/contracts/hardhat/deployments/xlayer/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/APRHistory.json b/contracts/hardhat/deployments/xlayer_testnet/APRHistory.json index bd05ff7f..c5d364cf 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/APRHistory.json +++ b/contracts/hardhat/deployments/xlayer_testnet/APRHistory.json @@ -202,4 +202,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist.json index 3113374c..40fa01c4 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist.json @@ -330,9 +330,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x4717bca6978f1BCAb59b7bc0B6849aba6062834c" - ] + "args": ["0x4717bca6978f1BCAb59b7bc0B6849aba6062834c"] }, "implementation": "0x5c437a38762b1608336De75C2BD35eEC59137ab4", "devdoc": { @@ -354,4 +352,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Implementation.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Implementation.json index 7d8871a3..9ceb0804 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Implementation.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Implementation.json @@ -541,4 +541,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Proxy.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Proxy.json index 62d08d90..f630b1be 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Proxy.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalBlacklist_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner.json index c52a082d..481e3302 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner.json @@ -282,10 +282,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", - "0x8129fc1c" - ], + "args": ["0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -315,4 +312,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Implementation.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Implementation.json index 41af0607..729733ee 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Implementation.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Implementation.json @@ -422,4 +422,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Proxy.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Proxy.json index 11a74014..1240961f 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Proxy.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalOwner_Proxy.json @@ -127,10 +127,7 @@ "status": 1, "byzantium": true }, - "args": [ - "0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", - "0x8129fc1c" - ], + "args": ["0xAB2B346BE06816B16E2e95392E4bfae1AAa6E728", "0x8129fc1c"], "numDeployments": 1, "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", @@ -155,4 +152,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalPause.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalPause.json index 1c18d67a..fec7552a 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalPause.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalPause.json @@ -312,9 +312,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x4717bca6978f1BCAb59b7bc0B6849aba6062834c" - ] + "args": ["0x4717bca6978f1BCAb59b7bc0B6849aba6062834c"] }, "implementation": "0xa54563C0AD02F50d18D65Fed3e850DF03C80dD34", "devdoc": { @@ -336,4 +334,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Implementation.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Implementation.json index dbeecb95..959d471b 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Implementation.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Implementation.json @@ -498,4 +498,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Proxy.json b/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Proxy.json index 4a8aef50..b168b808 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Proxy.json +++ b/contracts/hardhat/deployments/xlayer_testnet/GlobalPause_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LDY.json b/contracts/hardhat/deployments/xlayer_testnet/LDY.json index 756480fc..4ab0f105 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LDY.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LDY.json @@ -482,4 +482,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LDYStaking.json b/contracts/hardhat/deployments/xlayer_testnet/LDYStaking.json index d3f379ff..94c17f74 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LDYStaking.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LDYStaking.json @@ -1018,22 +1018,10 @@ "0x9bD7AF4a9Af603A0f4f53d39Ab2a97Cea7E4A7e6", "0x39c54346eFA8e38FBC7B4daB3dc9B61D76e80e3b", [ - [ - 0, - 10000 - ], - [ - 2678400, - 40000 - ], - [ - 16070400, - 60000 - ], - [ - 32140800, - 100000 - ] + [0, 10000], + [2678400, 40000], + [16070400, 60000], + [32140800, 100000] ], 32140800, "1000000000000000000000" @@ -1059,4 +1047,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Implementation.json b/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Implementation.json index fb648e14..6ef2aa2f 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Implementation.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Implementation.json @@ -1738,4 +1738,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Proxy.json b/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Proxy.json index e05ff7c7..ee82dd9b 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Proxy.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LDYStaking_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler.json b/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler.json index e5c55085..ddf563ba 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler.json @@ -285,9 +285,7 @@ "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", "execute": { "methodName": "initialize", - "args": [ - "0x4717bca6978f1BCAb59b7bc0B6849aba6062834c" - ] + "args": ["0x4717bca6978f1BCAb59b7bc0B6849aba6062834c"] }, "implementation": "0xc212584379262dCAE89227cb73ED4fF11952B323", "devdoc": { @@ -309,4 +307,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Implementation.json b/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Implementation.json index 869da0a3..a86c84df 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Implementation.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Implementation.json @@ -458,4 +458,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Proxy.json b/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Proxy.json index e1a61d20..69107854 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Proxy.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LTokenSignaler_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LUSDC.json b/contracts/hardhat/deployments/xlayer_testnet/LUSDC.json index 9a95b021..1ffce341 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LUSDC.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LUSDC.json @@ -1406,4 +1406,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Implementation.json b/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Implementation.json index 91843710..e9fbc199 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Implementation.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Implementation.json @@ -2502,4 +2502,4 @@ } } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Proxy.json b/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Proxy.json index 331cb851..9f317d97 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Proxy.json +++ b/contracts/hardhat/deployments/xlayer_testnet/LUSDC_Proxy.json @@ -141,4 +141,4 @@ "storage": [], "types": null } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/contracts/hardhat/deployments/xlayer_testnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json index 6eb5ed90..557e5cb0 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/contracts/hardhat/deployments/xlayer_testnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -68,13 +68,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json b/contracts/hardhat/deployments/xlayer_testnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json index 17f1c36b..3a66115a 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json +++ b/contracts/hardhat/deployments/xlayer_testnet/solcInputs/851bca7bcae1175170e3def49d0b02e4.json @@ -171,13 +171,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/deployments/xlayer_testnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json b/contracts/hardhat/deployments/xlayer_testnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json index 54faa9f3..d190fcdb 100644 --- a/contracts/hardhat/deployments/xlayer_testnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json +++ b/contracts/hardhat/deployments/xlayer_testnet/solcInputs/b5b3f1cfe4b89ed5996f5a0ba11d1ffb.json @@ -153,13 +153,11 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { "useLiteralContent": true } } -} \ No newline at end of file +} diff --git a/contracts/hardhat/lib/deployLToken.cts b/contracts/hardhat/lib/deployLToken.cts index 4cc4d9d0..cf3590a9 100644 --- a/contracts/hardhat/lib/deployLToken.cts +++ b/contracts/hardhat/lib/deployLToken.cts @@ -1,7 +1,10 @@ import { type DeployFunction } from "hardhat-deploy/dist/types"; import dependencies from "../../dependencies.json"; -export const deployLToken = (lTokenSymbol: string, underlyingSymbol: string) => { +export const deployLToken = ( + lTokenSymbol: string, + underlyingSymbol: string, +) => { return (async ({ getNamedAccounts, deployments, getChainId }) => { const { deployer } = await getNamedAccounts(); const chainId = await getChainId(); @@ -34,11 +37,13 @@ export const deployLToken = (lTokenSymbol: string, underlyingSymbol: string) => `${underlyingSymbol} address not available, ensure it is set in dependencies.json`, ); // Check if the underlying token is set in dependencies.json - if (!Object.keys(dependencies).includes(underlyingSymbol)) throw missingAddressError; + if (!Object.keys(dependencies).includes(underlyingSymbol)) + throw missingAddressError; // Check address of underlying token is available for the current chain in dependencies.json // @ts-ignore - if (!Object.keys(dependencies[underlyingSymbol]).includes(chainId)) throw missingAddressError; + if (!Object.keys(dependencies[underlyingSymbol]).includes(chainId)) + throw missingAddressError; // Retrieve underlying token address from dependencies.json // @ts-ignore diff --git a/contracts/src/GenericERC20.sol b/contracts/src/GenericERC20.sol index 23702f26..b6b7a127 100644 --- a/contracts/src/GenericERC20.sol +++ b/contracts/src/GenericERC20.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { ERC20Burnable } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; /** * @notice Used for testing purposes only, and used to generate ABIs for Wagmi contracts calls. @@ -13,24 +13,28 @@ import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC2 * easily test different decimals scenarios. */ contract GenericERC20 is ERC20, ERC20Burnable { - uint8 private _decimals; + uint8 private _decimals; - constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) { - _decimals = decimals_; - } + constructor( + string memory name, + string memory symbol, + uint8 decimals_ + ) ERC20(name, symbol) { + _decimals = decimals_; + } - function mint(uint256 amount) public { - _mint(msg.sender, amount); - } + function mint(uint256 amount) public { + _mint(msg.sender, amount); + } - function decimals() public view virtual override returns (uint8) { - return _decimals; - } + function decimals() public view virtual override returns (uint8) { + return _decimals; + } - /** - * Used in tests to test different decimals scenarios. - */ - function setDecimals(uint8 decimals_) public { - _decimals = decimals_; - } + /** + * Used in tests to test different decimals scenarios. + */ + function setDecimals(uint8 decimals_) public { + _decimals = decimals_; + } } diff --git a/contracts/src/GlobalBlacklist.sol b/contracts/src/GlobalBlacklist.sol index e371456a..6fb3d11a 100644 --- a/contracts/src/GlobalBlacklist.sol +++ b/contracts/src/GlobalBlacklist.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalOwnableUpgradeable} from "./abstracts/GlobalOwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalOwnableUpgradeable } from "./abstracts/GlobalOwnableUpgradeable.sol"; /** * @title GlobalBlacklist @@ -20,78 +20,86 @@ import {GlobalOwnableUpgradeable} from "./abstracts/GlobalOwnableUpgradeable.sol * @dev For further details, see "GlobalBlacklist" section of whitepaper. * @custom:security-contact security@ledgity.com */ -contract GlobalBlacklist is Initializable, UUPSUpgradeable, GlobalOwnableUpgradeable { - /** - * @notice Mapping of accounts to their blacklist status. - * @dev This mapping is made private and isBlacklisted() should be used instead.This - * helps saving gas in some scenario. See isBlacklisted() documentation for more details. - */ - mapping(address => bool) private _list; +contract GlobalBlacklist is + Initializable, + UUPSUpgradeable, + GlobalOwnableUpgradeable +{ + /** + * @notice Mapping of accounts to their blacklist status. + * @dev This mapping is made private and isBlacklisted() should be used instead.This + * helps saving gas in some scenario. See isBlacklisted() documentation for more details. + */ + mapping(address => bool) private _list; - /// @dev Emitted when `account` is blacklisted. - event Blacklisted(address account); + /// @dev Emitted when `account` is blacklisted. + event Blacklisted(address account); - /// @dev Emitted when `account` is unblacklisted. - event Unblacklisted(address account); + /// @dev Emitted when `account` is unblacklisted. + event Unblacklisted(address account); - /** - * @notice Prevents implementation contract from being initialized as recommended by - * OpenZeppelin. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- - * @custom:oz-upgrades-unsafe-allow constructor - */ - constructor() { - _disableInitializers(); - } + /** + * @notice Prevents implementation contract from being initialized as recommended by + * OpenZeppelin. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- + * @custom:oz-upgrades-unsafe-allow constructor + */ + constructor() { + _disableInitializers(); + } - /** - * @notice Initializer function of the contract. It replaces the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - */ - function initialize(address globalOwner_) public initializer { - __GlobalOwnable_init(globalOwner_); - __UUPSUpgradeable_init(); - } + /** + * @notice Initializer function of the contract. It replaces the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + */ + function initialize(address globalOwner_) public initializer { + __GlobalOwnable_init(globalOwner_); + __UUPSUpgradeable_init(); + } - /** - * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to - * global owner. It is called by the proxy contract during an upgrade. - * @param newImplementation The address of the new implementation contract. - */ - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + /** + * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to + * global owner. It is called by the proxy contract during an upgrade. + * @param newImplementation The address of the new implementation contract. + */ + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} - /** - * @notice Adds a given account to the blacklist. - * @param account The account's address to be blacklisted. - */ - function blacklist(address account) external onlyOwner { - require(account != address(0), "L20"); - _list[account] = true; - emit Blacklisted(account); - } + /** + * @notice Adds a given account to the blacklist. + * @param account The account's address to be blacklisted. + */ + function blacklist(address account) external onlyOwner { + require(account != address(0), "L20"); + _list[account] = true; + emit Blacklisted(account); + } - /** - * @notice Removes a given account from the blacklist. - * @param account The account's address to be un-blacklisted. - */ - function unBlacklist(address account) external onlyOwner { - _list[account] = false; - emit Unblacklisted(account); - } + /** + * @notice Removes a given account from the blacklist. + * @param account The account's address to be un-blacklisted. + */ + function unBlacklist(address account) external onlyOwner { + _list[account] = false; + emit Unblacklisted(account); + } - /** - * @notice Checks whether a given account is blacklisted. - * @param account Address of the account to check. - * @return 'true' if the account is blacklisted, 'false' otherwise - */ - function isBlacklisted(address account) external view returns (bool) { - // Gas optimization: Avoid accessing storage if account is the zero address - // (e.g, during a mint or a burn of tokens) - if (account == address(0)) return false; + /** + * @notice Checks whether a given account is blacklisted. + * @param account Address of the account to check. + * @return 'true' if the account is blacklisted, 'false' otherwise + */ + function isBlacklisted( + address account + ) external view returns (bool) { + // Gas optimization: Avoid accessing storage if account is the zero address + // (e.g, during a mint or a burn of tokens) + if (account == address(0)) return false; - // Else, return current account's blacklist status - return _list[account]; - } + // Else, return current account's blacklist status + return _list[account]; + } } diff --git a/contracts/src/GlobalOwner.sol b/contracts/src/GlobalOwner.sol index c613893a..acb49d3d 100644 --- a/contracts/src/GlobalOwner.sol +++ b/contracts/src/GlobalOwner.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { Ownable2StepUpgradeable } from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; /** * @title GlobalOwner @@ -20,31 +20,37 @@ import {Ownable2StepUpgradeable} from "@openzeppelin/contracts-upgradeable/acces * @dev For further details, see "GlobalOwner" section of whitepaper. * @custom:security-contact security@ledgity.com */ -contract GlobalOwner is Initializable, UUPSUpgradeable, Ownable2StepUpgradeable { - /** - * @notice Prevents implementation contract from being initialized as recommended by - * OpenZeppelin. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- - * @custom:oz-upgrades-unsafe-allow constructor - */ - constructor() { - _disableInitializers(); - } +contract GlobalOwner is + Initializable, + UUPSUpgradeable, + Ownable2StepUpgradeable +{ + /** + * @notice Prevents implementation contract from being initialized as recommended by + * OpenZeppelin. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- + * @custom:oz-upgrades-unsafe-allow constructor + */ + constructor() { + _disableInitializers(); + } - /** - * @notice Initializer function of the contract. It replaces the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - */ - function initialize() public initializer { - __Ownable2Step_init(); - __UUPSUpgradeable_init(); - } + /** + * @notice Initializer function of the contract. It replaces the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + */ + function initialize() public initializer { + __Ownable2Step_init(); + __UUPSUpgradeable_init(); + } - /** - * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to - * global owner. It is called by the proxy contract during an upgrade. - * @param newImplementation The address of the new implementation contract. - */ - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + /** + * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to + * global owner. It is called by the proxy contract during an upgrade. + * @param newImplementation The address of the new implementation contract. + */ + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} } diff --git a/contracts/src/GlobalPause.sol b/contracts/src/GlobalPause.sol index 1245711a..2e31cad5 100644 --- a/contracts/src/GlobalPause.sol +++ b/contracts/src/GlobalPause.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; -import {GlobalOwnableUpgradeable} from "./abstracts/GlobalOwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import { GlobalOwnableUpgradeable } from "./abstracts/GlobalOwnableUpgradeable.sol"; /** * @title GlobalPause @@ -22,49 +22,51 @@ import {GlobalOwnableUpgradeable} from "./abstracts/GlobalOwnableUpgradeable.sol * @custom:security-contact security@ledgity.com */ contract GlobalPause is - Initializable, - UUPSUpgradeable, - GlobalOwnableUpgradeable, - PausableUpgradeable + Initializable, + UUPSUpgradeable, + GlobalOwnableUpgradeable, + PausableUpgradeable { - /** - * @notice Prevents implementation contract from being initialized as recommended by - * OpenZeppelin. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- - * @custom:oz-upgrades-unsafe-allow constructor - */ - constructor() { - _disableInitializers(); - } + /** + * @notice Prevents implementation contract from being initialized as recommended by + * OpenZeppelin. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- + * @custom:oz-upgrades-unsafe-allow constructor + */ + constructor() { + _disableInitializers(); + } - /** - * @notice Initializer function of the contract. It replaces the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - */ - function initialize(address globalOwner_) public initializer { - __GlobalOwnable_init(globalOwner_); - __Pausable_init(); - __UUPSUpgradeable_init(); - } + /** + * @notice Initializer function of the contract. It replaces the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + */ + function initialize(address globalOwner_) public initializer { + __GlobalOwnable_init(globalOwner_); + __Pausable_init(); + __UUPSUpgradeable_init(); + } - /** - * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to - * global owner. It is called by the proxy contract during an upgrade. - * @param newImplementation The address of the new implementation contract. - */ - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + /** + * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to + * global owner. It is called by the proxy contract during an upgrade. + * @param newImplementation The address of the new implementation contract. + */ + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} - /** - * @dev Public implementation of PausableUpgradeable's pausing and unpausing functions - * but restricted to contract's owner. - */ - function pause() public onlyOwner { - _pause(); - } + /** + * @dev Public implementation of PausableUpgradeable's pausing and unpausing functions + * but restricted to contract's owner. + */ + function pause() public onlyOwner { + _pause(); + } - function unpause() public onlyOwner { - _unpause(); - } + function unpause() public onlyOwner { + _unpause(); + } } diff --git a/contracts/src/LDY.sol b/contracts/src/LDY.sol index aca65402..30423809 100644 --- a/contracts/src/LDY.sol +++ b/contracts/src/LDY.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { ERC20Burnable } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; /** * @title LDY @@ -30,7 +30,7 @@ import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC2 * @custom:security-contact security@ledgity.com */ contract LDY is ERC20, ERC20Burnable { - constructor() ERC20("Ledgity Token", "LDY") { - _mint(msg.sender, 75_000_000 * 10 ** decimals()); - } + constructor() ERC20("Ledgity Token", "LDY") { + _mint(msg.sender, 75_000_000 * 10 ** decimals()); + } } diff --git a/contracts/src/LDYStaking.sol b/contracts/src/LDYStaking.sol index eaed2a23..4debef7e 100644 --- a/contracts/src/LDYStaking.sol +++ b/contracts/src/LDYStaking.sol @@ -2,14 +2,14 @@ pragma solidity 0.8.18; // Contracts -import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; -import {BaseUpgradeable} from "./abstracts/base/BaseUpgradeable.sol"; +import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; +import { BaseUpgradeable } from "./abstracts/base/BaseUpgradeable.sol"; // Libraries -import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; // Interfaces -import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; /** * @title LDYStaking @@ -21,471 +21,558 @@ import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20 * @custom:security-contact security@ledgity.com */ contract LDYStaking is BaseUpgradeable, ReentrancyGuardUpgradeable { - using SafeERC20Upgradeable for IERC20Upgradeable; - - /** - * @notice Represents a user staking info in array. - * @param stakedAmount Amount of the stake. - * @param unStakeAt Unstake at. - * @param duration Staking period in seconds. - * @param rewardPerTokenPaid Reward per token paid. - * @param rewards Rewards to be claimed. - */ - struct StakingInfo { - uint256 stakedAmount; - uint256 unStakeAt; - uint256 duration; - uint256 rewardPerTokenPaid; - uint256 rewards; + using SafeERC20Upgradeable for IERC20Upgradeable; + + /** + * @notice Represents a user staking info in array. + * @param stakedAmount Amount of the stake. + * @param unStakeAt Unstake at. + * @param duration Staking period in seconds. + * @param rewardPerTokenPaid Reward per token paid. + * @param rewards Rewards to be claimed. + */ + struct StakingInfo { + uint256 stakedAmount; + uint256 unStakeAt; + uint256 duration; + uint256 rewardPerTokenPaid; + uint256 rewards; + } + + /** + * @notice Represent duration and multiplier per each stake option. + * @param duration Staking period in seconds. + * @param multiplier Token weight + */ + struct StakeDurationInfo { + uint256 duration; + uint256 multiplier; + } + + /// @notice Decimals of multiplier + uint256 public constant MULTIPLIER_BASIS = 1e4; + + /// @notice Stake and Reward token. + IERC20Upgradeable public stakeRewardToken; + + /// @notice Minimal stake duration for perks. + uint256 public stakeDurationForPerks; + + /// @notice Minimal stake amount for perks. + uint256 public stakeAmountForPerks; + + /// @notice Stake durations info array. + StakeDurationInfo[] public stakeDurationInfos; + + /// @notice Duration of the rewards (in seconds). + uint256 public rewardsDuration; + + /// @notice Timestamp of when the rewards finish. + uint256 public finishAt; + + /// @notice Timestamp of the reward updated. + uint256 public lastUpdateTime; + + /// @notice Reward per second(total rewards / duration). + uint256 public rewardRatePerSec; + + /// @notice Reward per token stored, sum of (reward rate * dt * 1e18 / total supply). + uint256 public rewardPerTokenStored; + + /// @notice Total staked amounts. + uint256 public totalStaked; + + // Total staked amounts with multiplier applied + uint256 public totalWeightedStake; + + /// @notice User stakingInfo map, user address => array of the staking info + mapping(address => StakingInfo[]) public userStakingInfo; + + /// @notice Total rewards amount. + uint256 public totalRewards; + + /** + * @notice Emitted when users stake token + * @param user User address + * @param stakeIndex Latest index of user staking pool + * @param amount Staked amount + */ + event Staked( + address indexed user, + uint256 stakeIndex, + uint256 amount + ); + + /** + * @notice Emitted when users unstake token + * @param user User address + * @param stakeIndex User staking pool index + * @param amount Staked amount + */ + event Unstaked( + address indexed user, + uint256 stakeIndex, + uint256 amount + ); + + /** + * @notice Emitted when users claim rewards + * @param user User address + * @param stakeIndex User staking pool index + * @param reward Reward token amount + */ + event RewardPaid( + address indexed user, + uint256 stakeIndex, + uint256 reward + ); + + /** + * @notice Emitted when admin add rewards. + * @param rewardAmount Reward amount added by admin. + * @param rewardPerSec RewardRatePerSec updated. + */ + event NotifiedRewardAmount( + uint256 rewardAmount, + uint256 rewardPerSec + ); + + /** + * @notice Holds a mapping of addresses that default to the highest staking tier. + * @dev This is notably used to allow PreMining contracts to benefit from 0% + * withdrawal fees in L-Tokens contracts, when accounts unlock their funds. + */ + mapping(address => bool) public highTierAccounts; + + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + /** + * @notice Initializes the contract and sets the initial state variables. This is called by the proxy and should only be called once. + * @dev This function is intended for setting initial values for the contract's state variables. + * @param globalOwner_ The address of the GlobalOwner contract. + * @param globalPause_ The address of the GlobalPause contract. + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + * @param stakeRewardToken_ The address of stake and reward token(LDY token). + * @param stakeDurationInfos_ Available Staking Durations. + * @param stakeDurationForPerks_ Minimal staking duration for perks. + * @param stakeAmountForPerks_ Minimal staking amount for perks. + */ + function initialize( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + address stakeRewardToken_, + StakeDurationInfo[] memory stakeDurationInfos_, + uint256 stakeDurationForPerks_, + uint256 stakeAmountForPerks_ + ) public initializer { + __Base_init(globalOwner_, globalPause_, globalBlacklist_); + stakeRewardToken = IERC20Upgradeable(stakeRewardToken_); + uint stakeDurationInfosLength = stakeDurationInfos_.length; + for (uint256 i = 0; i < stakeDurationInfosLength; i++) { + stakeDurationInfos.push(stakeDurationInfos_[i]); } - - /** - * @notice Represent duration and multiplier per each stake option. - * @param duration Staking period in seconds. - * @param multiplier Token weight - */ - struct StakeDurationInfo { - uint256 duration; - uint256 multiplier; - } - - /// @notice Decimals of multiplier - uint256 public constant MULTIPLIER_BASIS = 1e4; - - /// @notice Stake and Reward token. - IERC20Upgradeable public stakeRewardToken; - - /// @notice Minimal stake duration for perks. - uint256 public stakeDurationForPerks; - - /// @notice Minimal stake amount for perks. - uint256 public stakeAmountForPerks; - - /// @notice Stake durations info array. - StakeDurationInfo[] public stakeDurationInfos; - - /// @notice Duration of the rewards (in seconds). - uint256 public rewardsDuration; - - /// @notice Timestamp of when the rewards finish. - uint256 public finishAt; - - /// @notice Timestamp of the reward updated. - uint256 public lastUpdateTime; - - /// @notice Reward per second(total rewards / duration). - uint256 public rewardRatePerSec; - - /// @notice Reward per token stored, sum of (reward rate * dt * 1e18 / total supply). - uint256 public rewardPerTokenStored; - - /// @notice Total staked amounts. - uint256 public totalStaked; - - // Total staked amounts with multiplier applied - uint256 public totalWeightedStake; - - /// @notice User stakingInfo map, user address => array of the staking info - mapping(address => StakingInfo[]) public userStakingInfo; - - /// @notice Total rewards amount. - uint256 public totalRewards; - - /** - * @notice Emitted when users stake token - * @param user User address - * @param stakeIndex Latest index of user staking pool - * @param amount Staked amount - */ - event Staked(address indexed user, uint256 stakeIndex, uint256 amount); - - /** - * @notice Emitted when users unstake token - * @param user User address - * @param stakeIndex User staking pool index - * @param amount Staked amount - */ - event Unstaked(address indexed user, uint256 stakeIndex, uint256 amount); - - /** - * @notice Emitted when users claim rewards - * @param user User address - * @param stakeIndex User staking pool index - * @param reward Reward token amount - */ - event RewardPaid(address indexed user, uint256 stakeIndex, uint256 reward); - - /** - * @notice Emitted when admin add rewards. - * @param rewardAmount Reward amount added by admin. - * @param rewardPerSec RewardRatePerSec updated. - */ - event NotifiedRewardAmount(uint256 rewardAmount, uint256 rewardPerSec); - - /** - * @notice Holds a mapping of addresses that default to the highest staking tier. - * @dev This is notably used to allow PreMining contracts to benefit from 0% - * withdrawal fees in L-Tokens contracts, when accounts unlock their funds. - */ - mapping(address => bool) public highTierAccounts; - - /// @custom:oz-upgrades-unsafe-allow constructor - constructor() { - _disableInitializers(); - } - - /** - * @notice Initializes the contract and sets the initial state variables. This is called by the proxy and should only be called once. - * @dev This function is intended for setting initial values for the contract's state variables. - * @param globalOwner_ The address of the GlobalOwner contract. - * @param globalPause_ The address of the GlobalPause contract. - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - * @param stakeRewardToken_ The address of stake and reward token(LDY token). - * @param stakeDurationInfos_ Available Staking Durations. - * @param stakeDurationForPerks_ Minimal staking duration for perks. - * @param stakeAmountForPerks_ Minimal staking amount for perks. - */ - function initialize( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - address stakeRewardToken_, - StakeDurationInfo[] memory stakeDurationInfos_, - uint256 stakeDurationForPerks_, - uint256 stakeAmountForPerks_ - ) public initializer { - __Base_init(globalOwner_, globalPause_, globalBlacklist_); - stakeRewardToken = IERC20Upgradeable(stakeRewardToken_); - uint stakeDurationInfosLength = stakeDurationInfos_.length; - for (uint256 i = 0; i < stakeDurationInfosLength; i++) { - stakeDurationInfos.push(stakeDurationInfos_[i]); - } - stakeDurationForPerks = stakeDurationForPerks_; - stakeAmountForPerks = stakeAmountForPerks_; - } - - // -------------------- - // MUTATIVE FUNCTIONS - // -------------------- - - /** - * @notice Staked tokens cannot be withdrawn during the stakeDuration period and are eligible to claim rewards. - * @dev Emits a `Staked` event upon successful staking. - * @param amount The amount of tokens to stake. - * @param stakeDurationIndex The Index of stakeDurationInfos array. - */ - function stake( - uint256 amount, - uint8 stakeDurationIndex - ) external nonReentrant whenNotPaused notBlacklisted(_msgSender()) { - require(amount > 0, "amount = 0"); - require(stakeDurationIndex <= stakeDurationInfos.length - 1, "Invalid staking period"); - - _updateReward(address(0), 0); - StakeDurationInfo memory stakeDurationInfo = stakeDurationInfos[stakeDurationIndex]; - StakingInfo memory stakingInfo = StakingInfo({ - stakedAmount: amount, - unStakeAt: block.timestamp + stakeDurationInfo.duration, - duration: stakeDurationInfo.duration, - rewardPerTokenPaid: rewardPerTokenStored, - rewards: 0 - }); - - // check whether account is eligible for benefit from the protocol - if (stakeDurationInfo.duration >= stakeDurationForPerks && amount >= stakeAmountForPerks) { - highTierAccounts[_msgSender()] = true; - } - - userStakingInfo[_msgSender()].push(stakingInfo); - - uint256 stakeIndex = userStakingInfo[_msgSender()].length - 1; - uint256 weightedStake = (amount * stakeDurationInfo.multiplier) / MULTIPLIER_BASIS; - totalWeightedStake += weightedStake; - totalStaked += amount; - - stakeRewardToken.safeTransferFrom(_msgSender(), address(this), amount); - - emit Staked(_msgSender(), stakeIndex, amount); - } - - /** - * @notice Withdraw staked tokens after stakeDuration has passed. - * @dev Emits a `Unstaked` event upon successful withdrawal. - * On full withdrawal, userStakingInfo removes stake pool for stakeIndex. - * @param amount The amount of tokens to withdraw. - * @param stakeIndex The index of user staking pool - */ - function unstake( - uint256 amount, - uint256 stakeIndex - ) external nonReentrant notBlacklisted(_msgSender()) { - require(amount > 0, "amount = 0"); - require(userStakingInfo[_msgSender()].length >= stakeIndex + 1, "Invalid stakeIndex"); - require( - block.timestamp >= userStakingInfo[_msgSender()][stakeIndex].unStakeAt, - "Cannot unstake during staking period" - ); - require( - amount <= userStakingInfo[_msgSender()][stakeIndex].stakedAmount, - "Insufficient unstake amount" - ); - - _updateReward(_msgSender(), stakeIndex); - - uint256 multiplier = _getMultiplier(userStakingInfo[_msgSender()][stakeIndex].duration); - - uint256 currentWeightedStake = (amount * multiplier) / MULTIPLIER_BASIS; - totalWeightedStake -= currentWeightedStake; - - totalStaked -= amount; - userStakingInfo[_msgSender()][stakeIndex].stakedAmount -= amount; - - // check whether account is eligible for benefit from the protocol - if ( - userStakingInfo[_msgSender()][stakeIndex].duration >= stakeDurationForPerks && - userStakingInfo[_msgSender()][stakeIndex].stakedAmount < stakeAmountForPerks - ) { - highTierAccounts[_msgSender()] = false; - } - - // remove staking info from array on full withdrawal - if (userStakingInfo[_msgSender()][stakeIndex].stakedAmount == 0) { - _claimReward(_msgSender(), stakeIndex); - - userStakingInfo[_msgSender()][stakeIndex] = userStakingInfo[_msgSender()][ - userStakingInfo[_msgSender()].length - 1 - ]; - userStakingInfo[_msgSender()].pop(); - } - stakeRewardToken.safeTransfer(_msgSender(), amount); - - emit Unstaked(_msgSender(), stakeIndex, amount); - } - - /** - * @notice Claim pending rewards. - * @dev Emits a `RewardPaid` event upon successful reward claim. - * @param stakeIndex The index of user staking pool. - */ - function getReward(uint256 stakeIndex) external nonReentrant notBlacklisted(_msgSender()) { - require(userStakingInfo[_msgSender()].length >= stakeIndex + 1, "Invalid stakeIndex"); - _updateReward(_msgSender(), stakeIndex); - _claimReward(_msgSender(), stakeIndex); + stakeDurationForPerks = stakeDurationForPerks_; + stakeAmountForPerks = stakeAmountForPerks_; + } + + // -------------------- + // MUTATIVE FUNCTIONS + // -------------------- + + /** + * @notice Staked tokens cannot be withdrawn during the stakeDuration period and are eligible to claim rewards. + * @dev Emits a `Staked` event upon successful staking. + * @param amount The amount of tokens to stake. + * @param stakeDurationIndex The Index of stakeDurationInfos array. + */ + function stake( + uint256 amount, + uint8 stakeDurationIndex + ) external nonReentrant whenNotPaused notBlacklisted(_msgSender()) { + require(amount > 0, "amount = 0"); + require( + stakeDurationIndex <= stakeDurationInfos.length - 1, + "Invalid staking period" + ); + + _updateReward(address(0), 0); + StakeDurationInfo memory stakeDurationInfo = stakeDurationInfos[ + stakeDurationIndex + ]; + StakingInfo memory stakingInfo = StakingInfo({ + stakedAmount: amount, + unStakeAt: block.timestamp + stakeDurationInfo.duration, + duration: stakeDurationInfo.duration, + rewardPerTokenPaid: rewardPerTokenStored, + rewards: 0 + }); + + // check whether account is eligible for benefit from the protocol + if ( + stakeDurationInfo.duration >= stakeDurationForPerks && + amount >= stakeAmountForPerks + ) { + highTierAccounts[_msgSender()] = true; } - // -------------------- - // ADMIN CONFIGURATION - // -------------------- - - /** - * @notice Update Rewards Duration. - * @dev Only callable by owner, and setting available only after rewards period. - * @param duration New reward duration in seconds. - */ - function setRewardsDuration(uint256 duration) external onlyOwner { - require(finishAt < block.timestamp, "reward duration is not finished"); - rewardsDuration = duration; + userStakingInfo[_msgSender()].push(stakingInfo); + + uint256 stakeIndex = userStakingInfo[_msgSender()].length - 1; + uint256 weightedStake = (amount * stakeDurationInfo.multiplier) / + MULTIPLIER_BASIS; + totalWeightedStake += weightedStake; + totalStaked += amount; + + stakeRewardToken.safeTransferFrom( + _msgSender(), + address(this), + amount + ); + + emit Staked(_msgSender(), stakeIndex, amount); + } + + /** + * @notice Withdraw staked tokens after stakeDuration has passed. + * @dev Emits a `Unstaked` event upon successful withdrawal. + * On full withdrawal, userStakingInfo removes stake pool for stakeIndex. + * @param amount The amount of tokens to withdraw. + * @param stakeIndex The index of user staking pool + */ + function unstake( + uint256 amount, + uint256 stakeIndex + ) external nonReentrant notBlacklisted(_msgSender()) { + require(amount > 0, "amount = 0"); + require( + userStakingInfo[_msgSender()].length >= stakeIndex + 1, + "Invalid stakeIndex" + ); + require( + block.timestamp >= + userStakingInfo[_msgSender()][stakeIndex].unStakeAt, + "Cannot unstake during staking period" + ); + require( + amount <= + userStakingInfo[_msgSender()][stakeIndex].stakedAmount, + "Insufficient unstake amount" + ); + + _updateReward(_msgSender(), stakeIndex); + + uint256 multiplier = _getMultiplier( + userStakingInfo[_msgSender()][stakeIndex].duration + ); + + uint256 currentWeightedStake = (amount * multiplier) / + MULTIPLIER_BASIS; + totalWeightedStake -= currentWeightedStake; + + totalStaked -= amount; + userStakingInfo[_msgSender()][stakeIndex].stakedAmount -= amount; + + // check whether account is eligible for benefit from the protocol + if ( + userStakingInfo[_msgSender()][stakeIndex].duration >= + stakeDurationForPerks && + userStakingInfo[_msgSender()][stakeIndex].stakedAmount < + stakeAmountForPerks + ) { + highTierAccounts[_msgSender()] = false; } - /** - * @notice Update stakeDurationForPerks - * @dev Only callable by owner. - * @param stakeDurationForPerks_ New stakeDurationForPerks. - */ - function setStakeDurationForPerks(uint256 stakeDurationForPerks_) external onlyOwner { - stakeDurationForPerks = stakeDurationForPerks_; - } + // remove staking info from array on full withdrawal + if (userStakingInfo[_msgSender()][stakeIndex].stakedAmount == 0) { + _claimReward(_msgSender(), stakeIndex); - /** - * @notice Update stakeAmountForPerks - * @dev Only callable by owner. - * @param stakeAmountForPerks_ New stakeDurationForPerks. - */ - function setStakeAmountForPerks(uint256 stakeAmountForPerks_) external onlyOwner { - stakeAmountForPerks = stakeAmountForPerks_; + userStakingInfo[_msgSender()][stakeIndex] = userStakingInfo[ + _msgSender() + ][userStakingInfo[_msgSender()].length - 1]; + userStakingInfo[_msgSender()].pop(); } - - /** - * @notice Push stakeDurationInfo - * @dev Only callable by owner. - */ - function pushStakeDurationInfo(StakeDurationInfo memory durationInfo) external onlyOwner { - stakeDurationInfos.push(durationInfo); + stakeRewardToken.safeTransfer(_msgSender(), amount); + + emit Unstaked(_msgSender(), stakeIndex, amount); + } + + /** + * @notice Claim pending rewards. + * @dev Emits a `RewardPaid` event upon successful reward claim. + * @param stakeIndex The index of user staking pool. + */ + function getReward( + uint256 stakeIndex + ) external nonReentrant notBlacklisted(_msgSender()) { + require( + userStakingInfo[_msgSender()].length >= stakeIndex + 1, + "Invalid stakeIndex" + ); + _updateReward(_msgSender(), stakeIndex); + _claimReward(_msgSender(), stakeIndex); + } + + // -------------------- + // ADMIN CONFIGURATION + // -------------------- + + /** + * @notice Update Rewards Duration. + * @dev Only callable by owner, and setting available only after rewards period. + * @param duration New reward duration in seconds. + */ + function setRewardsDuration(uint256 duration) external onlyOwner { + require( + finishAt < block.timestamp, + "reward duration is not finished" + ); + rewardsDuration = duration; + } + + /** + * @notice Update stakeDurationForPerks + * @dev Only callable by owner. + * @param stakeDurationForPerks_ New stakeDurationForPerks. + */ + function setStakeDurationForPerks( + uint256 stakeDurationForPerks_ + ) external onlyOwner { + stakeDurationForPerks = stakeDurationForPerks_; + } + + /** + * @notice Update stakeAmountForPerks + * @dev Only callable by owner. + * @param stakeAmountForPerks_ New stakeDurationForPerks. + */ + function setStakeAmountForPerks( + uint256 stakeAmountForPerks_ + ) external onlyOwner { + stakeAmountForPerks = stakeAmountForPerks_; + } + + /** + * @notice Push stakeDurationInfo + * @dev Only callable by owner. + */ + function pushStakeDurationInfo( + StakeDurationInfo memory durationInfo + ) external onlyOwner { + stakeDurationInfos.push(durationInfo); + } + + /** + * @notice Notify the contract about the amount of rewards to be distributed and update reward parameters. + * @dev Only callable by owner. + * @param amount The amount of reward to be distributed. + */ + function notifyRewardAmount(uint256 amount) external onlyOwner { + require(rewardsDuration > 0, "rewards duration is not set"); + require(amount > 0, "amount = 0"); + + _updateReward(address(0), 0); + + if (block.timestamp >= finishAt) { + rewardRatePerSec = amount / rewardsDuration; + } else { + uint256 remainingRewards = (finishAt - block.timestamp) * + rewardRatePerSec; + rewardRatePerSec = + (amount + remainingRewards) / + rewardsDuration; } - /** - * @notice Notify the contract about the amount of rewards to be distributed and update reward parameters. - * @dev Only callable by owner. - * @param amount The amount of reward to be distributed. - */ - function notifyRewardAmount(uint256 amount) external onlyOwner { - require(rewardsDuration > 0, "rewards duration is not set"); - require(amount > 0, "amount = 0"); - - _updateReward(address(0), 0); - - if (block.timestamp >= finishAt) { - rewardRatePerSec = amount / rewardsDuration; - } else { - uint256 remainingRewards = (finishAt - block.timestamp) * rewardRatePerSec; - rewardRatePerSec = (amount + remainingRewards) / rewardsDuration; - } - - require(rewardRatePerSec > 0, "reward rate = 0"); - require( - rewardRatePerSec <= - (stakeRewardToken.balanceOf(address(this)) + amount - totalStaked) / - rewardsDuration, - "reward amount > balance" - ); - - finishAt = block.timestamp + rewardsDuration; - lastUpdateTime = block.timestamp; - - totalRewards += amount; - stakeRewardToken.safeTransferFrom(_msgSender(), address(this), amount); - - emit NotifiedRewardAmount(amount, rewardRatePerSec); + require(rewardRatePerSec > 0, "reward rate = 0"); + require( + rewardRatePerSec <= + (stakeRewardToken.balanceOf(address(this)) + + amount - + totalStaked) / + rewardsDuration, + "reward amount > balance" + ); + + finishAt = block.timestamp + rewardsDuration; + lastUpdateTime = block.timestamp; + + totalRewards += amount; + stakeRewardToken.safeTransferFrom( + _msgSender(), + address(this), + amount + ); + + emit NotifiedRewardAmount(amount, rewardRatePerSec); + } + + // -------------------- + // VIEW FUNCTIONS + // -------------------- + + /** + * @notice Get the last time when rewards were applicable for the specified reward token. + * @return Timestamp of the most recent rewards calculation. + */ + function lastTimeRewardApplicable() public view returns (uint256) { + return _min(finishAt, block.timestamp); + } + + /** + * @notice Calculate the reward per token for a given reward token. + * @return Current reward per token. + */ + function rewardPerToken() public view returns (uint256) { + if (totalStaked == 0) { + return rewardPerTokenStored; } - // -------------------- - // VIEW FUNCTIONS - // -------------------- - - /** - * @notice Get the last time when rewards were applicable for the specified reward token. - * @return Timestamp of the most recent rewards calculation. - */ - function lastTimeRewardApplicable() public view returns (uint256) { - return _min(finishAt, block.timestamp); + return + rewardPerTokenStored + + ((rewardRatePerSec * + (lastTimeRewardApplicable() - lastUpdateTime) * + 1e18) / totalWeightedStake); + } + + /** + * @notice Calculate the user's stake pool earnings + * @param account Address of the user. + * @param stakeIndex Index of the stakePool + * @return Return earned amounts + */ + function earned( + address account, + uint256 stakeIndex + ) public view returns (uint256) { + StakingInfo memory userInfo = userStakingInfo[account][ + stakeIndex + ]; + uint256 multiplier = _getMultiplier(userInfo.duration); + uint256 weightedAmount = (userInfo.stakedAmount * multiplier) / + MULTIPLIER_BASIS; + uint256 rewardsSinceLastUpdate = ((weightedAmount * + (rewardPerToken() - userInfo.rewardPerTokenPaid)) / 1e18); + return rewardsSinceLastUpdate + userInfo.rewards; + } + + /** + * @notice Get the earned rewards array for a user. + * @param account Address of the user. + * @return Return earned rewards array for a user. + */ + function getEarnedUser( + address account + ) public view returns (uint256[] memory) { + uint256 numberOfPools = userStakingInfo[account].length; + uint256[] memory earnedArray = new uint256[](numberOfPools); + for (uint256 index; index < numberOfPools; index++) { + earnedArray[index] = earned(account, index); } - - /** - * @notice Calculate the reward per token for a given reward token. - * @return Current reward per token. - */ - function rewardPerToken() public view returns (uint256) { - if (totalStaked == 0) { - return rewardPerTokenStored; - } - - return - rewardPerTokenStored + - ((rewardRatePerSec * (lastTimeRewardApplicable() - lastUpdateTime) * 1e18) / - totalWeightedStake); + return earnedArray; + } + + /** + * @dev tierOf() function that always return that the given account is not + * elligible to any LDY staking tier, except if the account is in the + * highTierAccounts mapping. + * @param account The account to check the tier of. + */ + function tierOf( + address account + ) public view returns (uint256 tier) { + if (highTierAccounts[account]) return 3; + return 0; + } + + /** + * @notice Get User Stake Data. + * @param account The address of user. + * @return StakingInfo array. + */ + function getUserStakes( + address account + ) external view returns (StakingInfo[] memory) { + return userStakingInfo[account]; + } + + /** + * @notice Get StakeDurationInfo. + * @param index Index of StakeDurationInfos. + * @return StakeDurationInfo. + */ + function getStakeDurationInfo( + uint256 index + ) external view returns (StakeDurationInfo memory) { + require(stakeDurationInfos.length - 1 >= index, "wrong index"); + return stakeDurationInfos[index]; + } + + /** + * @notice Send rewards to user. + * @dev This is private function, called by getReward function. + * @param account The address of user. + * @param stakeIndex The index of user staking pool. + */ + function _claimReward(address account, uint256 stakeIndex) private { + uint256 reward = userStakingInfo[account][stakeIndex].rewards; + + if (reward > 0) { + userStakingInfo[account][stakeIndex].rewards = 0; + totalRewards -= reward; + stakeRewardToken.safeTransfer(account, reward); + emit RewardPaid(account, stakeIndex, reward); } - - /** - * @notice Calculate the user's stake pool earnings - * @param account Address of the user. - * @param stakeIndex Index of the stakePool - * @return Return earned amounts - */ - function earned(address account, uint256 stakeIndex) public view returns (uint256) { - StakingInfo memory userInfo = userStakingInfo[account][stakeIndex]; - uint256 multiplier = _getMultiplier(userInfo.duration); - uint256 weightedAmount = (userInfo.stakedAmount * multiplier) / MULTIPLIER_BASIS; - uint256 rewardsSinceLastUpdate = ((weightedAmount * - (rewardPerToken() - userInfo.rewardPerTokenPaid)) / 1e18); - return rewardsSinceLastUpdate + userInfo.rewards; + } + + /** + * @notice Calculate and update user rewards per stakeIndex. + * @dev this is private function, called by stake, unstake, getRewards, and notifyRewardAmount functions. + * @param account The address of user. + * @param stakeIndex The index of user staking pool. + */ + function _updateReward( + address account, + uint256 stakeIndex + ) private { + rewardPerTokenStored = rewardPerToken(); + lastUpdateTime = lastTimeRewardApplicable(); + + if (account != address(0)) { + userStakingInfo[account][stakeIndex].rewards = earned( + account, + stakeIndex + ); + userStakingInfo[account][stakeIndex] + .rewardPerTokenPaid = rewardPerTokenStored; } - - /** - * @notice Get the earned rewards array for a user. - * @param account Address of the user. - * @return Return earned rewards array for a user. - */ - function getEarnedUser(address account) public view returns (uint256[] memory) { - uint256 numberOfPools = userStakingInfo[account].length; - uint256[] memory earnedArray = new uint256[](numberOfPools); - for (uint256 index; index < numberOfPools; index++) { - earnedArray[index] = earned(account, index); - } - return earnedArray; - } - - /** - * @dev tierOf() function that always return that the given account is not - * elligible to any LDY staking tier, except if the account is in the - * highTierAccounts mapping. - * @param account The account to check the tier of. - */ - function tierOf(address account) public view returns (uint256 tier) { - if (highTierAccounts[account]) return 3; - return 0; - } - - /** - * @notice Get User Stake Data. - * @param account The address of user. - * @return StakingInfo array. - */ - function getUserStakes(address account) external view returns (StakingInfo[] memory) { - return userStakingInfo[account]; - } - - /** - * @notice Get StakeDurationInfo. - * @param index Index of StakeDurationInfos. - * @return StakeDurationInfo. - */ - function getStakeDurationInfo(uint256 index) external view returns (StakeDurationInfo memory) { - require(stakeDurationInfos.length - 1 >= index, "wrong index"); - return stakeDurationInfos[index]; - } - - /** - * @notice Send rewards to user. - * @dev This is private function, called by getReward function. - * @param account The address of user. - * @param stakeIndex The index of user staking pool. - */ - function _claimReward(address account, uint256 stakeIndex) private { - uint256 reward = userStakingInfo[account][stakeIndex].rewards; - - if (reward > 0) { - userStakingInfo[account][stakeIndex].rewards = 0; - totalRewards -= reward; - stakeRewardToken.safeTransfer(account, reward); - emit RewardPaid(account, stakeIndex, reward); - } - } - - /** - * @notice Calculate and update user rewards per stakeIndex. - * @dev this is private function, called by stake, unstake, getRewards, and notifyRewardAmount functions. - * @param account The address of user. - * @param stakeIndex The index of user staking pool. - */ - function _updateReward(address account, uint256 stakeIndex) private { - rewardPerTokenStored = rewardPerToken(); - lastUpdateTime = lastTimeRewardApplicable(); - - if (account != address(0)) { - userStakingInfo[account][stakeIndex].rewards = earned(account, stakeIndex); - userStakingInfo[account][stakeIndex].rewardPerTokenPaid = rewardPerTokenStored; - } - } - - /** - * @notice Get multiplier from stakeDurationInfo based on duration - * @param duration Stake Duration - */ - function _getMultiplier(uint256 duration) private view returns (uint256) { - uint256 stakeDurationInfosLength = stakeDurationInfos.length; - for (uint256 i = 0; i < stakeDurationInfosLength; i++) { - StakeDurationInfo memory stakeDurationInfo = stakeDurationInfos[i]; - if (duration == stakeDurationInfo.duration) { - return stakeDurationInfo.multiplier; - } - } - return 0; - } - - /** - * @notice Take minimum value between x and y. - */ - function _min(uint256 x, uint256 y) private pure returns (uint256) { - return x <= y ? x : y; + } + + /** + * @notice Get multiplier from stakeDurationInfo based on duration + * @param duration Stake Duration + */ + function _getMultiplier( + uint256 duration + ) private view returns (uint256) { + uint256 stakeDurationInfosLength = stakeDurationInfos.length; + for (uint256 i = 0; i < stakeDurationInfosLength; i++) { + StakeDurationInfo memory stakeDurationInfo = stakeDurationInfos[ + i + ]; + if (duration == stakeDurationInfo.duration) { + return stakeDurationInfo.multiplier; + } } + return 0; + } + + /** + * @notice Take minimum value between x and y. + */ + function _min(uint256 x, uint256 y) private pure returns (uint256) { + return x <= y ? x : y; + } } diff --git a/contracts/src/LToken.sol b/contracts/src/LToken.sol index efb118f0..47636d9f 100644 --- a/contracts/src/LToken.sol +++ b/contracts/src/LToken.sol @@ -2,19 +2,19 @@ pragma solidity 0.8.18; // Contracts -import {ERC20WrapperUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20WrapperUpgradeable.sol"; +import { ERC20WrapperUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20WrapperUpgradeable.sol"; import "./abstracts/base/ERC20BaseUpgradeable.sol"; -import {InvestUpgradeable} from "./abstracts/InvestUpgradeable.sol"; -import {LDYStaking} from "./LDYStaking.sol"; +import { InvestUpgradeable } from "./abstracts/InvestUpgradeable.sol"; +import { LDYStaking } from "./LDYStaking.sol"; // Libraries -import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; -import {SUD} from "./libs/SUD.sol"; +import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import { SUD } from "./libs/SUD.sol"; // Interfaces -import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; -import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; -import {ITransfersListener} from "./interfaces/ITransfersListener.sol"; +import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import { IERC20MetadataUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; +import { ITransfersListener } from "./interfaces/ITransfersListener.sol"; /** * @title LToken @@ -54,982 +54,1076 @@ import {ITransfersListener} from "./interfaces/ITransfersListener.sol"; * @custom:oz-upgrades-unsafe-allow external-library-linking * @custom:security-contact security@ledgity.com */ -contract LToken is ERC20BaseUpgradeable, InvestUpgradeable, ERC20WrapperUpgradeable { - using SafeERC20Upgradeable for IERC20Upgradeable; - - /// @dev Represents type of actions triggering ActivityEvent events. - enum Action { - Deposit, - Withdraw - } - - /// @dev Represents different status of actions triggering ActivityEvent events. - enum Status { - Queued, - Cancelled, - Success, - Moved - } - - /** - * @notice Represents a withdrawal request in the queue. - * @dev A request fits in a single storage slot (32 bytes). - * @param account The account that initiated the request. - * @param amount The amount of underlying tokens requested. - */ - struct WithdrawalRequest { - address account; // 20 bytes - uint96 amount; // 12 bytes - } - - /// @notice Upper limit of retention rate. - uint32 private constant MAX_RETENTION_RATE_UD7x3 = 10 * 10 ** 3; // 10% - - /// @notice Upper limit of fees rate. - uint32 private constant MAX_FEES_RATE_UD7x3 = 20 * 10 ** 3; // 20% - - /// @notice Used in activity events to represent the absence of request ID. - int256 private constant NO_ID = -1; - - /// @notice Holds a reference to the LDYStaking contract. - LDYStaking public ldyStaking; - - /// @notice Holds address of withdrawer wallet (managed by withdrawal server). - address payable public withdrawer; - - /// @notice Holds address of fund wallet (managed by Ledgity financial team). - address public fund; - - /// @notice Holds the withdrawal fees rate in UD7x3 format (e.g., 350 = 0.350%). - uint32 public feesRateUD7x3; - - /// @notice Holds the retention rate in UD7x3 format. - uint32 public retentionRateUD7x3; - - /// @notice Holds the amount of withdrawal fees not yet claimed by contract's owner. - uint256 public unclaimedFees; - - /// @notice Holds the amount of L-Tokens currently in the withdrawal queue. - uint256 public totalQueued; - - /** - * @notice Holds the amount of underlying tokens considered as usable by the contract. - * @dev Are usable, only underlying tokens deposit through deposit() or fund() functions. - */ - uint256 public usableUnderlyings; - - /// @notice Holds an ordered list of active withdrawal requests. - WithdrawalRequest[] public withdrawalQueue; - - /// @notice Holds the index of the next withdrawal request to process in the queue. - uint256 public withdrawalQueueCursor; - - /** - * @notice Holds a list of all currently frozen withdrawal requests. - * @dev If a request emitter as been blacklisted, its request is moved here to prevent - * it from blocking the queue. - */ - WithdrawalRequest[] public frozenRequests; - - /** - * @notice Holds a list of contracts' references that are listening to L-Tokens transfers. - * @dev onLTokenTransfer() functions of those contracts will be called on each transfer. - */ - ITransfersListener[] public transfersListeners; - - /** - * @notice Holds the withdrawalFee amount in ETH that will be sent to withdrawer wallet. - */ - uint256 public withdrawalFeeInEth; - - /** - * @notice Emitted to inform listeners about a change in the contract's TVL. - * @dev TVL = realTotalSupply() - * @param newTVL The new TVL of the contract. - */ - event TVLChangeEvent(uint256 newTVL); - - /** - * @notice Emitted to inform listerners about an activity related to deposits and withdrawals. - * @param id ID of the involved withdrawal request or NO_ID (-1) if not applicable. - * @param account The account involved in the activity. - * @param action The type of activity. - * @param amount The amount of underlying tokens involved in the activity. - * @param newStatus The new status of the activity. - * @param newId The new ID of the request if it has been moved in the queue. - */ - event ActivityEvent( - int256 indexed id, - address indexed account, - Action indexed action, - uint256 amount, - uint256 amountAfterFees, - Status newStatus, - int256 newId, - string referralCode +contract LToken is + ERC20BaseUpgradeable, + InvestUpgradeable, + ERC20WrapperUpgradeable +{ + using SafeERC20Upgradeable for IERC20Upgradeable; + + /// @dev Represents type of actions triggering ActivityEvent events. + enum Action { + Deposit, + Withdraw + } + + /// @dev Represents different status of actions triggering ActivityEvent events. + enum Status { + Queued, + Cancelled, + Success, + Moved + } + + /** + * @notice Represents a withdrawal request in the queue. + * @dev A request fits in a single storage slot (32 bytes). + * @param account The account that initiated the request. + * @param amount The amount of underlying tokens requested. + */ + struct WithdrawalRequest { + address account; // 20 bytes + uint96 amount; // 12 bytes + } + + /// @notice Upper limit of retention rate. + uint32 private constant MAX_RETENTION_RATE_UD7x3 = 10 * 10 ** 3; // 10% + + /// @notice Upper limit of fees rate. + uint32 private constant MAX_FEES_RATE_UD7x3 = 20 * 10 ** 3; // 20% + + /// @notice Used in activity events to represent the absence of request ID. + int256 private constant NO_ID = -1; + + /// @notice Holds a reference to the LDYStaking contract. + LDYStaking public ldyStaking; + + /// @notice Holds address of withdrawer wallet (managed by withdrawal server). + address payable public withdrawer; + + /// @notice Holds address of fund wallet (managed by Ledgity financial team). + address public fund; + + /// @notice Holds the withdrawal fees rate in UD7x3 format (e.g., 350 = 0.350%). + uint32 public feesRateUD7x3; + + /// @notice Holds the retention rate in UD7x3 format. + uint32 public retentionRateUD7x3; + + /// @notice Holds the amount of withdrawal fees not yet claimed by contract's owner. + uint256 public unclaimedFees; + + /// @notice Holds the amount of L-Tokens currently in the withdrawal queue. + uint256 public totalQueued; + + /** + * @notice Holds the amount of underlying tokens considered as usable by the contract. + * @dev Are usable, only underlying tokens deposit through deposit() or fund() functions. + */ + uint256 public usableUnderlyings; + + /// @notice Holds an ordered list of active withdrawal requests. + WithdrawalRequest[] public withdrawalQueue; + + /// @notice Holds the index of the next withdrawal request to process in the queue. + uint256 public withdrawalQueueCursor; + + /** + * @notice Holds a list of all currently frozen withdrawal requests. + * @dev If a request emitter as been blacklisted, its request is moved here to prevent + * it from blocking the queue. + */ + WithdrawalRequest[] public frozenRequests; + + /** + * @notice Holds a list of contracts' references that are listening to L-Tokens transfers. + * @dev onLTokenTransfer() functions of those contracts will be called on each transfer. + */ + ITransfersListener[] public transfersListeners; + + /** + * @notice Holds the withdrawalFee amount in ETH that will be sent to withdrawer wallet. + */ + uint256 public withdrawalFeeInEth; + + /** + * @notice Emitted to inform listeners about a change in the contract's TVL. + * @dev TVL = realTotalSupply() + * @param newTVL The new TVL of the contract. + */ + event TVLChangeEvent(uint256 newTVL); + + /** + * @notice Emitted to inform listerners about an activity related to deposits and withdrawals. + * @param id ID of the involved withdrawal request or NO_ID (-1) if not applicable. + * @param account The account involved in the activity. + * @param action The type of activity. + * @param amount The amount of underlying tokens involved in the activity. + * @param newStatus The new status of the activity. + * @param newId The new ID of the request if it has been moved in the queue. + */ + event ActivityEvent( + int256 indexed id, + address indexed account, + Action indexed action, + uint256 amount, + uint256 amountAfterFees, + Status newStatus, + int256 newId, + string referralCode + ); + + /** + * @notice Emitted to inform listeners that some rewards have been minted. + * @param account The account that received the rewards. + * @param balanceBefore The balance of the account before the minting. + * @param rewards The amount of minted rewards. + */ + event MintedRewardsEvent( + address indexed account, + uint256 balanceBefore, + uint256 rewards + ); + + /// @notice Reverts if the function caller is not the withdrawer wallet. + modifier onlyWithdrawer() { + require(_msgSender() == withdrawer, "L39"); + _; + } + + /// @notice Reverts if the function caller is not the fund wallet. + modifier onlyFund() { + require(_msgSender() == fund, "L40"); + _; + } + + /** + * @notice Initializer function of the contract. It replaces the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + * @param globalPause_ The address of the GlobalPause contract. + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + * @param underlyingToken The address of the underlying stablecoin ERC20 token. + */ + function initialize( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + address ldyStaking_, + address underlyingToken + ) public initializer { + // Initialize ERC20 base. + string memory underlyingSymbol = IERC20MetadataUpgradeable( + underlyingToken + ).symbol(); + __ERC20Base_init( + globalOwner_, + globalPause_, + globalBlacklist_, + string(abi.encodePacked("Ledgity ", underlyingSymbol)), + string(abi.encodePacked("L", underlyingSymbol)) ); - /** - * @notice Emitted to inform listeners that some rewards have been minted. - * @param account The account that received the rewards. - * @param balanceBefore The balance of the account before the minting. - * @param rewards The amount of minted rewards. - */ - event MintedRewardsEvent(address indexed account, uint256 balanceBefore, uint256 rewards); - - /// @notice Reverts if the function caller is not the withdrawer wallet. - modifier onlyWithdrawer() { - require(_msgSender() == withdrawer, "L39"); - _; - } - - /// @notice Reverts if the function caller is not the fund wallet. - modifier onlyFund() { - require(_msgSender() == fund, "L40"); - _; - } - - /** - * @notice Initializer function of the contract. It replaces the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - * @param globalPause_ The address of the GlobalPause contract. - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - * @param underlyingToken The address of the underlying stablecoin ERC20 token. - */ - function initialize( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - address ldyStaking_, - address underlyingToken - ) public initializer { - // Initialize ERC20 base. - string memory underlyingSymbol = IERC20MetadataUpgradeable(underlyingToken).symbol(); - __ERC20Base_init( - globalOwner_, - globalPause_, - globalBlacklist_, - string(abi.encodePacked("Ledgity ", underlyingSymbol)), - string(abi.encodePacked("L", underlyingSymbol)) - ); - - // IMPORTANT: Below calls must not be restricted to owner at any point. - // This is because the GlobalOwner contract may not be a fresh one, and so - // the contract deployer may not be the owner anymore after ERC20Base init. - - // Initialize other parents contracts. - __ERC20Wrapper_init(IERC20Upgradeable(underlyingToken)); - __Invest_init_unchained(address(this)); - - // Set LDYStaking contract - ldyStaking = LDYStaking(ldyStaking_); - - // Set initial withdrawal fees rate to 0.3% - feesRateUD7x3 = 300; - - // Set initial retention rate to 10% - retentionRateUD7x3 = 10_000; - - // Default withdrawer and fund wallet to contract owner address. This prevents - // any loss of funds if a deposit/withdrawal is made before those are manually set. - withdrawer = payable(owner()); - fund = payable(owner()); - - // Set initial withdrawalFeeInEth - withdrawalFeeInEth = 0.00075 * 1e18; - } - - /** - * @notice Required override of decimals() which is implemented by both - * ERC20Upgradeable and ERC20WrapperUpgradeable parent contracts. - * @dev The ERC20WrapperUpgradeable version is preferred because it mirrors the - * decimals amount of the underlying stablecoin token. - * @inheritdoc ERC20WrapperUpgradeable - */ - function decimals() - public - view - override(ERC20Upgradeable, ERC20WrapperUpgradeable) - returns (uint8) - { - return ERC20WrapperUpgradeable.decimals(); - } - - /** - * @notice Required override of paused() which is implemented by both - * GlobalPausableUpgradeable and ERC20BaseUpgradeable parent contracts. - * @dev Both version are the same as ERC20BaseUpgradeable.paused() mirrors - * GlobalPausableUpgradeable.paused(), so a random one is chosen. - * @inheritdoc GlobalPausableUpgradeable - */ - function paused() - public - view - virtual - override(GlobalPausableUpgradeable, ERC20BaseUpgradeable) - returns (bool) - { - return GlobalPausableUpgradeable.paused(); - } - - /** - * @notice Updates the current withdrawal fee rate. - * @param feesRateUD7x3_ The new withdrawal fee rate in UD7x3 format. - */ - function setFeesRate(uint32 feesRateUD7x3_) public onlyOwner { - require(feesRateUD7x3_ <= MAX_FEES_RATE_UD7x3, "L88"); - feesRateUD7x3 = feesRateUD7x3_; - } - - /** - * @notice Updates the current withdrawalFeeInETH. - * @param withdrawalFeeInEth_ The new withdrawalFee in ETH. - */ - function setWithdrawalFeeInEth(uint256 withdrawalFeeInEth_) public onlyOwner { - withdrawalFeeInEth = withdrawalFeeInEth_; - } - - /** - * @notice Updates the current underlying token retention rate. - * @dev The retention rate is capped at 10%, which ensures that no more than 10% of - * deposited assets will ever be exposed in this contract (reduces attack surface). - * @param retentionRateUD7x3_ The new retention rate in UD7x3 format. - */ - function setRetentionRate(uint32 retentionRateUD7x3_) public onlyOwner { - require(retentionRateUD7x3_ <= MAX_RETENTION_RATE_UD7x3, "L41"); - retentionRateUD7x3 = retentionRateUD7x3_; - } - - /** - * @notice Updates the address of LDYStaking contract. - * @param ldyStakingAddress The address of the new LDYStaking contract. - */ - function setLDYStaking(address ldyStakingAddress) public onlyOwner { - ldyStaking = LDYStaking(ldyStakingAddress); - } - - /** - * @notice Updates the address of the withdrawer wallet. - * @param withdrawer_ The address of the new withdrawer wallet. - */ - function setWithdrawer(address payable withdrawer_) public onlyOwner { - // Ensure address is not the zero address (pre-processing fees would be lost else) - require(withdrawer_ != address(0), "L63"); - - // Set new withdrawer wallet's address - withdrawer = withdrawer_; - } - - /** - * @notice Updates the address of the fund wallet. - * @param fund_ The address of the new fund wallet. - */ - function setFund(address payable fund_) public onlyOwner { - // Ensure address is not the zero address (deposited tokens would be lost else) - require(fund_ != address(0), "L64"); - - // Set new fund wallet's address - fund = fund_; - } - - /** - * @notice Adds a new contract to the L-Token transfers list. - * @dev Each time a transfer occurs, the onLTokenTransfer() function of the - * specified contract will be called. - * @dev IMPORTANT SECURITY NOTE: This method is not intended to be used with - * contracts that are not owned by the Ledgity team. - * @param listenerContract The address of the new transfers listener contract. - */ - function listenToTransfers(address listenerContract) public onlyOwner { - transfersListeners.push(ITransfersListener(listenerContract)); - } - - /** - * @notice Removes a contract from the L-Token transfers list. - * @dev The onLTokenTransfer() function of the specified contract will not be called - * anymore each time a L-Token transfer occurs. - * @param listenerContract The address of the listener contract. - */ - function unlistenToTransfers(address listenerContract) public onlyOwner { - // Find index of listener contract in transferListeners array - int256 index = -1; - uint256 transfersListenersLength = transfersListeners.length; - for (uint256 i = 0; i < transfersListenersLength; i++) { - if (address(transfersListeners[i]) == listenerContract) { - index = int256(i); - break; - } - } - - // Revert if given contract wasn't listening to transfers - require(index > -1, "L42"); - - // Else, remove transfers listener contract from listeners array - transfersListeners[uint256(index)] = transfersListeners[transfersListenersLength - 1]; - transfersListeners.pop(); - } - - /** - * @notice Retrieves the amount of given account's not yet minted rewards. - * @dev This is a public implementation of InvestUpgradeable_rewardsOf(). In the - * context of LToken, this function returns the amount of rewards that have not been - * distributed/minted yet to the specified account. - * @dev This is particularly useful for off-chain services to display charts and - * statistics, as seen in the Ledgity Yield's frontend. - * @param account The account to check the unminted rewards of. - * @return The amount of account's unminted rewards. - */ - function unmintedRewardsOf(address account) public view returns (uint256) { - return _rewardsOf(account, true); - } - - /** - * @notice Retrieves the "real" balance of an account, i.e., excluding its not yet - * minted/distributed rewards. - * @param account The account to check the real balance of. - * @return The real balance of the account. - */ - function realBalanceOf(address account) public view returns (uint256) { - return super.balanceOf(account); - } - - /** - * @notice Retrieves the total balance of L-Tokens that belong to the account. - * @dev This is an oOverride of ERC20Upgradeable.balanceOf() that rewards that have - * not been yet minted to the specified account. - * @param account The account to check the total balance of. - * @return The total balance of the account. - */ - function balanceOf(address account) public view override returns (uint256) { - return realBalanceOf(account) + unmintedRewardsOf(account); - } - - /** - * @notice Returns the "real" amount of existing L-Tokens, i.e., excluding not yet - * minted withdrawal fees and L-Tokens currently in the withdrawal queue. - * @return The real total supply of L-Tokens. - */ - function realTotalSupply() public view returns (uint256) { - return super.totalSupply(); - } - - /** - * @notice Retrives the total supply of L-Tokens, including not yet minted withdrawal - * fees and L-Tokens currently in the withdrawal queue. - * @return The total supply of L-Tokens. - */ - function totalSupply() public view override returns (uint256) { - return realTotalSupply() + totalQueued + unclaimedFees; - } - - /** - * @notice Recovers a specified amount of a given token address. - * @dev This override of RecoverableUpgradeable.recoverERC20() prevents the recovered - * token from being the underlying token. - * @inheritdoc RecoverableUpgradeable - */ - function recoverERC20(address tokenAddress, uint256 amount) public override onlyOwner { - // Ensure the token is not the underlying token - require(tokenAddress != address(underlying()), "L43"); - - // Proceed to recovery - super.recoverERC20(tokenAddress, amount); - } - - /** - * @notice Recovers underlying tokens accidentally sent to the contract. - * @dev To prevent owner from being able to drain the contract, this function only - * allows recovering "unusable" underlying tokens, i.e., tokens that have not been - * sent through fund() or deposit() functions. - */ - function recoverUnderlying() external onlyOwner { - // Compute the recoverable amount by taking the difference between the contract's - // balance and the amount of usable underlying tokens - uint256 recoverableAmount = underlying().balanceOf(address(this)) - usableUnderlyings; - - // Revert if there is nothing to recover - require(recoverableAmount > 0, "L44"); - - // Else, proceed to underlying tokens recovery - super.recoverERC20(address(underlying()), recoverableAmount); - } - - /** - * @notice Retrieves the amount of underlying tokens invested by the given account. - * @dev Implementing this function is required by the InvestUpgradeable contract. In - * LToken contract, the investment of an account is equal to its real balance. - * @inheritdoc InvestUpgradeable - */ - function _investmentOf(address account) internal view override returns (uint256) { - return realBalanceOf(account); - } - - /** - * @notice Distributes a specified amount of rewards (in L-Tokens) to a given account. - * @dev Implementing this function is required by the InvestUpgradeable contract so - * it can distribute rewards to accounts before each period reset. - * @dev InvestUpgradeable contract already ensure that amount > 0. - * @inheritdoc InvestUpgradeable - */ - function _distributeRewards(address account, uint256 amount) internal override returns (bool) { - // Inform listeners of the rewards minting - emit MintedRewardsEvent(account, realBalanceOf(account), amount); - - // Mint L-Tokens rewards to account - _mint(account, amount); - - // Return true indicating to InvestUpgradeable that the rewards have been distributed - return true; - } - - /** - * @notice Override of ERC20._beforeTokenTransfer() to integrate with InvestUpgradeable. - * @dev This overriden version ensure that _beforeInvestmentChange() hook is properly - * called each time an account's balance is going to change. - * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are - * already included in ERC20BaseUpgradeable._beforeTokenTransfer(). - * @inheritdoc ERC20BaseUpgradeable - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 amount - ) internal override(ERC20Upgradeable, ERC20BaseUpgradeable) { - ERC20BaseUpgradeable._beforeTokenTransfer(from, to, amount); - - // Invoke _beforeInvestmentChange() hook for non-zero accounts - if (from != address(0)) _beforeInvestmentChange(from, true); - if (to != address(0)) _beforeInvestmentChange(to, true); - } - - /** - * @notice Override of ERC20._afterTokenTransfer() to notify all transfers listeners. - * @dev This overriden version will trigger onLTokenTransfer() functions of all - * transfers listeners. - * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are - * already checked in _beforeTokenTransfer(). - * @inheritdoc ERC20Upgradeable - */ - function _afterTokenTransfer(address from, address to, uint256 amount) internal override { - super._afterTokenTransfer(from, to, amount); - - // If some L-Token have been burned/minted, inform listeners of a TVL change - if (from == address(0) || to == address(0)) emit TVLChangeEvent(totalSupply()); - - // Trigger onLTokenTransfer() functions of all the transfers listeners - for (uint256 i = 0; i < transfersListeners.length; i++) { - transfersListeners[i].onLTokenTransfer(from, to, amount); - } + // IMPORTANT: Below calls must not be restricted to owner at any point. + // This is because the GlobalOwner contract may not be a fresh one, and so + // the contract deployer may not be the owner anymore after ERC20Base init. + + // Initialize other parents contracts. + __ERC20Wrapper_init(IERC20Upgradeable(underlyingToken)); + __Invest_init_unchained(address(this)); + + // Set LDYStaking contract + ldyStaking = LDYStaking(ldyStaking_); + + // Set initial withdrawal fees rate to 0.3% + feesRateUD7x3 = 300; + + // Set initial retention rate to 10% + retentionRateUD7x3 = 10_000; + + // Default withdrawer and fund wallet to contract owner address. This prevents + // any loss of funds if a deposit/withdrawal is made before those are manually set. + withdrawer = payable(owner()); + fund = payable(owner()); + + // Set initial withdrawalFeeInEth + withdrawalFeeInEth = 0.00075 * 1e18; + } + + /** + * @notice Required override of decimals() which is implemented by both + * ERC20Upgradeable and ERC20WrapperUpgradeable parent contracts. + * @dev The ERC20WrapperUpgradeable version is preferred because it mirrors the + * decimals amount of the underlying stablecoin token. + * @inheritdoc ERC20WrapperUpgradeable + */ + function decimals() + public + view + override(ERC20Upgradeable, ERC20WrapperUpgradeable) + returns (uint8) + { + return ERC20WrapperUpgradeable.decimals(); + } + + /** + * @notice Required override of paused() which is implemented by both + * GlobalPausableUpgradeable and ERC20BaseUpgradeable parent contracts. + * @dev Both version are the same as ERC20BaseUpgradeable.paused() mirrors + * GlobalPausableUpgradeable.paused(), so a random one is chosen. + * @inheritdoc GlobalPausableUpgradeable + */ + function paused() + public + view + virtual + override(GlobalPausableUpgradeable, ERC20BaseUpgradeable) + returns (bool) + { + return GlobalPausableUpgradeable.paused(); + } + + /** + * @notice Updates the current withdrawal fee rate. + * @param feesRateUD7x3_ The new withdrawal fee rate in UD7x3 format. + */ + function setFeesRate(uint32 feesRateUD7x3_) public onlyOwner { + require(feesRateUD7x3_ <= MAX_FEES_RATE_UD7x3, "L88"); + feesRateUD7x3 = feesRateUD7x3_; + } + + /** + * @notice Updates the current withdrawalFeeInETH. + * @param withdrawalFeeInEth_ The new withdrawalFee in ETH. + */ + function setWithdrawalFeeInEth( + uint256 withdrawalFeeInEth_ + ) public onlyOwner { + withdrawalFeeInEth = withdrawalFeeInEth_; + } + + /** + * @notice Updates the current underlying token retention rate. + * @dev The retention rate is capped at 10%, which ensures that no more than 10% of + * deposited assets will ever be exposed in this contract (reduces attack surface). + * @param retentionRateUD7x3_ The new retention rate in UD7x3 format. + */ + function setRetentionRate( + uint32 retentionRateUD7x3_ + ) public onlyOwner { + require(retentionRateUD7x3_ <= MAX_RETENTION_RATE_UD7x3, "L41"); + retentionRateUD7x3 = retentionRateUD7x3_; + } + + /** + * @notice Updates the address of LDYStaking contract. + * @param ldyStakingAddress The address of the new LDYStaking contract. + */ + function setLDYStaking(address ldyStakingAddress) public onlyOwner { + ldyStaking = LDYStaking(ldyStakingAddress); + } + + /** + * @notice Updates the address of the withdrawer wallet. + * @param withdrawer_ The address of the new withdrawer wallet. + */ + function setWithdrawer( + address payable withdrawer_ + ) public onlyOwner { + // Ensure address is not the zero address (pre-processing fees would be lost else) + require(withdrawer_ != address(0), "L63"); + + // Set new withdrawer wallet's address + withdrawer = withdrawer_; + } + + /** + * @notice Updates the address of the fund wallet. + * @param fund_ The address of the new fund wallet. + */ + function setFund(address payable fund_) public onlyOwner { + // Ensure address is not the zero address (deposited tokens would be lost else) + require(fund_ != address(0), "L64"); + + // Set new fund wallet's address + fund = fund_; + } + + /** + * @notice Adds a new contract to the L-Token transfers list. + * @dev Each time a transfer occurs, the onLTokenTransfer() function of the + * specified contract will be called. + * @dev IMPORTANT SECURITY NOTE: This method is not intended to be used with + * contracts that are not owned by the Ledgity team. + * @param listenerContract The address of the new transfers listener contract. + */ + function listenToTransfers( + address listenerContract + ) public onlyOwner { + transfersListeners.push(ITransfersListener(listenerContract)); + } + + /** + * @notice Removes a contract from the L-Token transfers list. + * @dev The onLTokenTransfer() function of the specified contract will not be called + * anymore each time a L-Token transfer occurs. + * @param listenerContract The address of the listener contract. + */ + function unlistenToTransfers( + address listenerContract + ) public onlyOwner { + // Find index of listener contract in transferListeners array + int256 index = -1; + uint256 transfersListenersLength = transfersListeners.length; + for (uint256 i = 0; i < transfersListenersLength; i++) { + if (address(transfersListeners[i]) == listenerContract) { + index = int256(i); + break; + } } - /** - * @notice Computes the maximum amount of underlying tokens that should be retained - * by the contract (based on retention rate). - * @return amount The expected amount of retained underlying tokens. - */ - function getExpectedRetained() public view returns (uint256 amount) { - // Cache invested token's decimals number - uint256 d = SUD.decimalsOf(address(invested())); - - // Convert totalSupply and retentionRate to SUD - uint256 totalSupplySUD = SUD.fromAmount(totalSupply(), d); - uint256 retentionRateSUD = SUD.fromRate(retentionRateUD7x3, d); - - // Compute and return expected retained amount - uint256 expectedRetainedSUD = (totalSupplySUD * retentionRateSUD) / SUD.fromInt(100, d); - return SUD.toAmount(expectedRetainedSUD, d); + // Revert if given contract wasn't listening to transfers + require(index > -1, "L42"); + + // Else, remove transfers listener contract from listeners array + transfersListeners[uint256(index)] = transfersListeners[ + transfersListenersLength - 1 + ]; + transfersListeners.pop(); + } + + /** + * @notice Retrieves the amount of given account's not yet minted rewards. + * @dev This is a public implementation of InvestUpgradeable_rewardsOf(). In the + * context of LToken, this function returns the amount of rewards that have not been + * distributed/minted yet to the specified account. + * @dev This is particularly useful for off-chain services to display charts and + * statistics, as seen in the Ledgity Yield's frontend. + * @param account The account to check the unminted rewards of. + * @return The amount of account's unminted rewards. + */ + function unmintedRewardsOf( + address account + ) public view returns (uint256) { + return _rewardsOf(account, true); + } + + /** + * @notice Retrieves the "real" balance of an account, i.e., excluding its not yet + * minted/distributed rewards. + * @param account The account to check the real balance of. + * @return The real balance of the account. + */ + function realBalanceOf( + address account + ) public view returns (uint256) { + return super.balanceOf(account); + } + + /** + * @notice Retrieves the total balance of L-Tokens that belong to the account. + * @dev This is an oOverride of ERC20Upgradeable.balanceOf() that rewards that have + * not been yet minted to the specified account. + * @param account The account to check the total balance of. + * @return The total balance of the account. + */ + function balanceOf( + address account + ) public view override returns (uint256) { + return realBalanceOf(account) + unmintedRewardsOf(account); + } + + /** + * @notice Returns the "real" amount of existing L-Tokens, i.e., excluding not yet + * minted withdrawal fees and L-Tokens currently in the withdrawal queue. + * @return The real total supply of L-Tokens. + */ + function realTotalSupply() public view returns (uint256) { + return super.totalSupply(); + } + + /** + * @notice Retrives the total supply of L-Tokens, including not yet minted withdrawal + * fees and L-Tokens currently in the withdrawal queue. + * @return The total supply of L-Tokens. + */ + function totalSupply() public view override returns (uint256) { + return realTotalSupply() + totalQueued + unclaimedFees; + } + + /** + * @notice Recovers a specified amount of a given token address. + * @dev This override of RecoverableUpgradeable.recoverERC20() prevents the recovered + * token from being the underlying token. + * @inheritdoc RecoverableUpgradeable + */ + function recoverERC20( + address tokenAddress, + uint256 amount + ) public override onlyOwner { + // Ensure the token is not the underlying token + require(tokenAddress != address(underlying()), "L43"); + + // Proceed to recovery + super.recoverERC20(tokenAddress, amount); + } + + /** + * @notice Recovers underlying tokens accidentally sent to the contract. + * @dev To prevent owner from being able to drain the contract, this function only + * allows recovering "unusable" underlying tokens, i.e., tokens that have not been + * sent through fund() or deposit() functions. + */ + function recoverUnderlying() external onlyOwner { + // Compute the recoverable amount by taking the difference between the contract's + // balance and the amount of usable underlying tokens + uint256 recoverableAmount = underlying().balanceOf( + address(this) + ) - usableUnderlyings; + + // Revert if there is nothing to recover + require(recoverableAmount > 0, "L44"); + + // Else, proceed to underlying tokens recovery + super.recoverERC20(address(underlying()), recoverableAmount); + } + + /** + * @notice Retrieves the amount of underlying tokens invested by the given account. + * @dev Implementing this function is required by the InvestUpgradeable contract. In + * LToken contract, the investment of an account is equal to its real balance. + * @inheritdoc InvestUpgradeable + */ + function _investmentOf( + address account + ) internal view override returns (uint256) { + return realBalanceOf(account); + } + + /** + * @notice Distributes a specified amount of rewards (in L-Tokens) to a given account. + * @dev Implementing this function is required by the InvestUpgradeable contract so + * it can distribute rewards to accounts before each period reset. + * @dev InvestUpgradeable contract already ensure that amount > 0. + * @inheritdoc InvestUpgradeable + */ + function _distributeRewards( + address account, + uint256 amount + ) internal override returns (bool) { + // Inform listeners of the rewards minting + emit MintedRewardsEvent(account, realBalanceOf(account), amount); + + // Mint L-Tokens rewards to account + _mint(account, amount); + + // Return true indicating to InvestUpgradeable that the rewards have been distributed + return true; + } + + /** + * @notice Override of ERC20._beforeTokenTransfer() to integrate with InvestUpgradeable. + * @dev This overriden version ensure that _beforeInvestmentChange() hook is properly + * called each time an account's balance is going to change. + * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are + * already included in ERC20BaseUpgradeable._beforeTokenTransfer(). + * @inheritdoc ERC20BaseUpgradeable + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount + ) internal override(ERC20Upgradeable, ERC20BaseUpgradeable) { + ERC20BaseUpgradeable._beforeTokenTransfer(from, to, amount); + + // Invoke _beforeInvestmentChange() hook for non-zero accounts + if (from != address(0)) _beforeInvestmentChange(from, true); + if (to != address(0)) _beforeInvestmentChange(to, true); + } + + /** + * @notice Override of ERC20._afterTokenTransfer() to notify all transfers listeners. + * @dev This overriden version will trigger onLTokenTransfer() functions of all + * transfers listeners. + * @dev Note: whenNotPaused and notBlacklisted modifiers are not set as they are + * already checked in _beforeTokenTransfer(). + * @inheritdoc ERC20Upgradeable + */ + function _afterTokenTransfer( + address from, + address to, + uint256 amount + ) internal override { + super._afterTokenTransfer(from, to, amount); + + // If some L-Token have been burned/minted, inform listeners of a TVL change + if (from == address(0) || to == address(0)) + emit TVLChangeEvent(totalSupply()); + + // Trigger onLTokenTransfer() functions of all the transfers listeners + for (uint256 i = 0; i < transfersListeners.length; i++) { + transfersListeners[i].onLTokenTransfer(from, to, amount); } + } + + /** + * @notice Computes the maximum amount of underlying tokens that should be retained + * by the contract (based on retention rate). + * @return amount The expected amount of retained underlying tokens. + */ + function getExpectedRetained() + public + view + returns (uint256 amount) + { + // Cache invested token's decimals number + uint256 d = SUD.decimalsOf(address(invested())); + + // Convert totalSupply and retentionRate to SUD + uint256 totalSupplySUD = SUD.fromAmount(totalSupply(), d); + uint256 retentionRateSUD = SUD.fromRate(retentionRateUD7x3, d); + + // Compute and return expected retained amount + uint256 expectedRetainedSUD = (totalSupplySUD * + retentionRateSUD) / SUD.fromInt(100, d); + return SUD.toAmount(expectedRetainedSUD, d); + } + + /// @notice Transfers underlying tokens exceeding the retention rate to the fund wallet. + function _transferExceedingToFund() internal { + // Retrieve the expected amount retained + uint256 expectedRetained = getExpectedRetained(); + + // If usable underlyings are less than or equal to expected retained, return + if (usableUnderlyings <= expectedRetained) return; + + // Else, exceeding amount is equal to difference between those values + uint256 exceedingAmount = usableUnderlyings - expectedRetained; + + // Decrease usable underlyings amount accordingly + usableUnderlyings -= exceedingAmount; + + // Transfer the exceeding amount to the fund wallet + underlying().safeTransfer(fund, exceedingAmount); + } + + /** + * @notice Override of ERC20WrapperUpgradeable.withdrawTo() that reverts. + * Use instantWithdrawal() or requestWithdrawal() functions instead. + * @inheritdoc ERC20WrapperUpgradeable + */ + function withdrawTo( + address account, + uint256 amount + ) public pure override returns (bool) { + account; // Silence unused variable compiler warning + amount; + revert("L45"); + } + + /** + * @notice Override of ERC20WrapperUpgradeable.depositFor() that reverts. + * Use deposit() function instead. + * @inheritdoc ERC20WrapperUpgradeable + */ + function depositFor( + address account, + uint256 amount + ) public pure override returns (bool) { + account; // Silence unused variable compiler warning + amount; + revert("L46"); + } + + /** + * @notice Allows exchanging some underlying tokens for the same amount of L-Tokens. + * @param amount The amount of underlying tokens to deposit. + * @param refCode The Referral code + */ + function deposit( + uint256 amount, + string memory refCode + ) public whenNotPaused notBlacklisted(_msgSender()) { + // Ensure the account has enough underlying tokens to deposit + require(underlying().balanceOf(_msgSender()) >= amount, "L47"); + + // Update usable underlyings balance accordingly + usableUnderlyings += amount; + + // Inform listeners of the deposit activity event + emit ActivityEvent( + NO_ID, + _msgSender(), + Action.Deposit, + amount, + amount, + Status.Success, + NO_ID, + refCode + ); - /// @notice Transfers underlying tokens exceeding the retention rate to the fund wallet. - function _transferExceedingToFund() internal { - // Retrieve the expected amount retained - uint256 expectedRetained = getExpectedRetained(); - - // If usable underlyings are less than or equal to expected retained, return - if (usableUnderlyings <= expectedRetained) return; - - // Else, exceeding amount is equal to difference between those values - uint256 exceedingAmount = usableUnderlyings - expectedRetained; - - // Decrease usable underlyings amount accordingly - usableUnderlyings -= exceedingAmount; - - // Transfer the exceeding amount to the fund wallet - underlying().safeTransfer(fund, exceedingAmount); - } - - /** - * @notice Override of ERC20WrapperUpgradeable.withdrawTo() that reverts. - * Use instantWithdrawal() or requestWithdrawal() functions instead. - * @inheritdoc ERC20WrapperUpgradeable - */ - function withdrawTo(address account, uint256 amount) public pure override returns (bool) { - account; // Silence unused variable compiler warning - amount; - revert("L45"); - } - - /** - * @notice Override of ERC20WrapperUpgradeable.depositFor() that reverts. - * Use deposit() function instead. - * @inheritdoc ERC20WrapperUpgradeable - */ - function depositFor(address account, uint256 amount) public pure override returns (bool) { - account; // Silence unused variable compiler warning - amount; - revert("L46"); - } - - /** - * @notice Allows exchanging some underlying tokens for the same amount of L-Tokens. - * @param amount The amount of underlying tokens to deposit. - * @param refCode The Referral code - */ - function deposit( - uint256 amount, - string memory refCode - ) public whenNotPaused notBlacklisted(_msgSender()) { - // Ensure the account has enough underlying tokens to deposit - require(underlying().balanceOf(_msgSender()) >= amount, "L47"); - - // Update usable underlyings balance accordingly - usableUnderlyings += amount; - - // Inform listeners of the deposit activity event - emit ActivityEvent( - NO_ID, - _msgSender(), - Action.Deposit, - amount, - amount, - Status.Success, - NO_ID, - refCode - ); - - // Receive underlying tokens and mint L-Tokens to the account in a 1:1 ratio - super.depositFor(_msgSender(), amount); + // Receive underlying tokens and mint L-Tokens to the account in a 1:1 ratio + super.depositFor(_msgSender(), amount); + + // Transfer exceeding underlying tokens to the fund wallet + _transferExceedingToFund(); + } + + /** + * @notice Computes fees and net withdrawn amount for a given account withdrawing a + * given amount. + * @param account The account initiating the withdrawal. + * @param amount The amount of the withdrawal. + */ + function getWithdrawnAmountAndFees( + address account, + uint256 amount + ) public view returns (uint256 withdrawnAmount, uint256 fees) { + // If the account is eligible to staking tier 2, no fees are applied + if (ldyStaking.tierOf(account) >= 2) return (amount, 0); + + // Cache invested token's decimals number + uint256 d = SUD.decimalsOf(address(invested())); + + // Convert amount and fees rate to SUD + uint256 amountSUD = SUD.fromAmount(amount, d); + uint256 feesRateSUD = SUD.fromRate(feesRateUD7x3, d); + + // Compute fees and withdrawn amount (initial amount minus fees) + uint256 feesSUD = (amountSUD * feesRateSUD) / SUD.fromInt(100, d); + fees = SUD.toAmount(feesSUD, d); + withdrawnAmount = amount - fees; + } + + /** + * @notice Allows instaneously exchanging a given amount of L-Tokens for the same + * amount of underlying tokens. It will fail if the contract currently doesn't hold + * enough underlying tokens to cover the withdrawal. + * @dev In order to save some gas and time to users, frontends should propose this + * function to users only when it has been verified that it will not revert. They + * should propose the requestWithdrawal() function otherwise. + * @param amount The amount L-Tokens to withdraw. + */ + function instantWithdrawal( + uint256 amount + ) external whenNotPaused notBlacklisted(_msgSender()) { + // Ensure the account has enough L-Tokens to withdraw + require(amount <= balanceOf(_msgSender()), "L48"); + + // Can the contract cover this withdrawal plus all already queued requests? + bool cond1 = totalQueued + amount <= usableUnderlyings; + + // Is caller eligible to staking tier 2 and the contract can cover this withdrawal? + bool cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && + amount <= usableUnderlyings; + + // Revert if conditions are not met for the withdrawal to be processed instantaneously + if (!(cond1 || cond2)) revert("L49"); + + // Else, retrieve withdrawal fees and net withdrawn amount + ( + uint256 withdrawnAmount, + uint256 fees + ) = getWithdrawnAmountAndFees(_msgSender(), amount); + + // Increase unclaimed fees amount accordingly + unclaimedFees += fees; + + // Decrease usable underlyings balance accordingly + usableUnderlyings -= withdrawnAmount; + + // Inform listeners of this instant withdrawal activity event + emit ActivityEvent( + NO_ID, + _msgSender(), + Action.Withdraw, + amount, + withdrawnAmount, + Status.Success, + NO_ID, + "" + ); - // Transfer exceeding underlying tokens to the fund wallet - _transferExceedingToFund(); + // Burn withdrawal fees from the account + _burn(_msgSender(), fees); + + // Burn account's withdrawn L-Tokens and transfer to it underlying tokens in a 1:1 ratio + super.withdrawTo(_msgSender(), withdrawnAmount); + } + + /** + * @notice Allows requesting the exchange of a given amount of L-Tokens for the same + * amount of underlying tokens. The request will be automatically processed later. + * @dev The sender must attach withdrawalFeeInETH to pre-pay the future processing gas fees + * paid by the withdrawer wallet. + * @param amount The amount L-Tokens to withdraw. + */ + function requestWithdrawal( + uint256 amount + ) public payable whenNotPaused notBlacklisted(_msgSender()) { + // Ensure the account has enough L-Tokens to withdraw + require(amount <= balanceOf(_msgSender()), "L53"); + + // Ensure the requested amount doesn't overflow uint96 + require(amount <= type(uint96).max, "L54"); + + // Ensure the sender attached the pre-paid processing gas fees + require(msg.value == withdrawalFeeInEth, "L55"); + + // Create withdrawal request data + WithdrawalRequest memory request = WithdrawalRequest({ + account: _msgSender(), + amount: uint96(amount) + }); + + // Will hold the request ID + uint256 requestId; + + // Append request to the withdrawal queue: + // - At the beginning, if account is eligible to staking tier 2 and cursor is not 0 + if ( + ldyStaking.tierOf(_msgSender()) >= 2 && + withdrawalQueueCursor > 0 + ) { + withdrawalQueueCursor--; + requestId = withdrawalQueueCursor; + withdrawalQueue[requestId] = request; } - - /** - * @notice Computes fees and net withdrawn amount for a given account withdrawing a - * given amount. - * @param account The account initiating the withdrawal. - * @param amount The amount of the withdrawal. - */ - function getWithdrawnAmountAndFees( - address account, - uint256 amount - ) public view returns (uint256 withdrawnAmount, uint256 fees) { - // If the account is eligible to staking tier 2, no fees are applied - if (ldyStaking.tierOf(account) >= 2) return (amount, 0); - - // Cache invested token's decimals number - uint256 d = SUD.decimalsOf(address(invested())); - - // Convert amount and fees rate to SUD - uint256 amountSUD = SUD.fromAmount(amount, d); - uint256 feesRateSUD = SUD.fromRate(feesRateUD7x3, d); - - // Compute fees and withdrawn amount (initial amount minus fees) - uint256 feesSUD = (amountSUD * feesRateSUD) / SUD.fromInt(100, d); - fees = SUD.toAmount(feesSUD, d); - withdrawnAmount = amount - fees; + // - At the end else + else { + withdrawalQueue.push(request); + requestId = withdrawalQueue.length - 1; } - /** - * @notice Allows instaneously exchanging a given amount of L-Tokens for the same - * amount of underlying tokens. It will fail if the contract currently doesn't hold - * enough underlying tokens to cover the withdrawal. - * @dev In order to save some gas and time to users, frontends should propose this - * function to users only when it has been verified that it will not revert. They - * should propose the requestWithdrawal() function otherwise. - * @param amount The amount L-Tokens to withdraw. - */ - function instantWithdrawal(uint256 amount) external whenNotPaused notBlacklisted(_msgSender()) { - // Ensure the account has enough L-Tokens to withdraw - require(amount <= balanceOf(_msgSender()), "L48"); - - // Can the contract cover this withdrawal plus all already queued requests? - bool cond1 = totalQueued + amount <= usableUnderlyings; - - // Is caller eligible to staking tier 2 and the contract can cover this withdrawal? - bool cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings; - - // Revert if conditions are not met for the withdrawal to be processed instantaneously - if (!(cond1 || cond2)) revert("L49"); - - // Else, retrieve withdrawal fees and net withdrawn amount - (uint256 withdrawnAmount, uint256 fees) = getWithdrawnAmountAndFees(_msgSender(), amount); - - // Increase unclaimed fees amount accordingly - unclaimedFees += fees; - - // Decrease usable underlyings balance accordingly - usableUnderlyings -= withdrawnAmount; - - // Inform listeners of this instant withdrawal activity event - emit ActivityEvent( - NO_ID, - _msgSender(), - Action.Withdraw, - amount, - withdrawnAmount, - Status.Success, - NO_ID, - "" - ); - - // Burn withdrawal fees from the account - _burn(_msgSender(), fees); - - // Burn account's withdrawn L-Tokens and transfer to it underlying tokens in a 1:1 ratio - super.withdrawTo(_msgSender(), withdrawnAmount); - } + // Increase total amount queued accordingly + totalQueued += amount; + + // Inform listeners of this new queued withdrawal activity event + emit ActivityEvent( + int256(requestId), + _msgSender(), + Action.Withdraw, + amount, + amount, + Status.Queued, + NO_ID, + "" + ); - /** - * @notice Allows requesting the exchange of a given amount of L-Tokens for the same - * amount of underlying tokens. The request will be automatically processed later. - * @dev The sender must attach withdrawalFeeInETH to pre-pay the future processing gas fees - * paid by the withdrawer wallet. - * @param amount The amount L-Tokens to withdraw. - */ - function requestWithdrawal( - uint256 amount - ) public payable whenNotPaused notBlacklisted(_msgSender()) { - // Ensure the account has enough L-Tokens to withdraw - require(amount <= balanceOf(_msgSender()), "L53"); - - // Ensure the requested amount doesn't overflow uint96 - require(amount <= type(uint96).max, "L54"); - - // Ensure the sender attached the pre-paid processing gas fees - require(msg.value == withdrawalFeeInEth, "L55"); - - // Create withdrawal request data - WithdrawalRequest memory request = WithdrawalRequest({ - account: _msgSender(), - amount: uint96(amount) - }); - - // Will hold the request ID - uint256 requestId; - - // Append request to the withdrawal queue: - // - At the beginning, if account is eligible to staking tier 2 and cursor is not 0 - if (ldyStaking.tierOf(_msgSender()) >= 2 && withdrawalQueueCursor > 0) { - withdrawalQueueCursor--; - requestId = withdrawalQueueCursor; - withdrawalQueue[requestId] = request; - } - // - At the end else - else { - withdrawalQueue.push(request); - requestId = withdrawalQueue.length - 1; - } - - // Increase total amount queued accordingly - totalQueued += amount; - - // Inform listeners of this new queued withdrawal activity event + // Burn withdrawal L-Tokens amount from account's balance + _burn(_msgSender(), amount); + + // Forward pre-paid processing gas fees to the withdrawer wallet + (bool sent, ) = withdrawer.call{ value: msg.value }(""); + require(sent, "L56"); + } + + /** + * @notice Processes queued withdrawal requests until there is else no more requests, + * else not enough underlying tokens to continue. + * @dev For further details, see "LToken > Withdrawals" section of whitepaper. + */ + function processQueuedRequests() + external + onlyWithdrawer + whenNotPaused + { + // Accumulators variables, will be written on-chain after the loop + uint256 cumulatedFees = 0; + uint256 cumulatedWithdrawnAmount = 0; + uint256 nextRequestId = withdrawalQueueCursor; + + // Cache queue length to avoid multiple SLOADs and avoid infinite loop as big + // requests are increasing the queue length when moved at the end of the queue. + uint256 queueLength = withdrawalQueue.length; + + // Iterate over requests to be processed + while (nextRequestId < queueLength) { + // Stop processing requests if there is not enough gas left to continue the + // loop and properly end the function call. This prevents an attacker from + // blocking the withdrawal processing by creating a ton of tiny requests so + // this function call cannot fit anymore in block gas limit. + if (gasleft() < 45000) break; + + // Retrieve request data + WithdrawalRequest memory request = withdrawalQueue[ + nextRequestId + ]; + + // Skip empty request (processed big requests or cancelled requests) + if (request.account == address(0)) {} + // + // If account has been blacklisted since request emission + else if (isBlacklisted(request.account)) { + // Remove request from queue + delete withdrawalQueue[nextRequestId]; + + // Append request in the frozen requests list + frozenRequests.push(request); + } + // + // Or if request is a big request, move it at the end of the queue for now. + // This request will be processed manually later using processBigQueuedRequest() + else if (request.amount > getExpectedRetained() / 2) { + // Inform listeners of this queued request being moved at the end of the queue emit ActivityEvent( - int256(requestId), - _msgSender(), - Action.Withdraw, - amount, - amount, - Status.Queued, - NO_ID, - "" + int256(nextRequestId), + _msgSender(), + Action.Withdraw, + request.amount, + request.amount, + Status.Moved, + int256(withdrawalQueue.length), + "" ); - // Burn withdrawal L-Tokens amount from account's balance - _burn(_msgSender(), amount); - - // Forward pre-paid processing gas fees to the withdrawer wallet - (bool sent, ) = withdrawer.call{value: msg.value}(""); - require(sent, "L56"); - } - - /** - * @notice Processes queued withdrawal requests until there is else no more requests, - * else not enough underlying tokens to continue. - * @dev For further details, see "LToken > Withdrawals" section of whitepaper. - */ - function processQueuedRequests() external onlyWithdrawer whenNotPaused { - // Accumulators variables, will be written on-chain after the loop - uint256 cumulatedFees = 0; - uint256 cumulatedWithdrawnAmount = 0; - uint256 nextRequestId = withdrawalQueueCursor; - - // Cache queue length to avoid multiple SLOADs and avoid infinite loop as big - // requests are increasing the queue length when moved at the end of the queue. - uint256 queueLength = withdrawalQueue.length; - - // Iterate over requests to be processed - while (nextRequestId < queueLength) { - // Stop processing requests if there is not enough gas left to continue the - // loop and properly end the function call. This prevents an attacker from - // blocking the withdrawal processing by creating a ton of tiny requests so - // this function call cannot fit anymore in block gas limit. - if (gasleft() < 45000) break; - - // Retrieve request data - WithdrawalRequest memory request = withdrawalQueue[nextRequestId]; - - // Skip empty request (processed big requests or cancelled requests) - if (request.account == address(0)) {} - // - // If account has been blacklisted since request emission - else if (isBlacklisted(request.account)) { - // Remove request from queue - delete withdrawalQueue[nextRequestId]; - - // Append request in the frozen requests list - frozenRequests.push(request); - } - // - // Or if request is a big request, move it at the end of the queue for now. - // This request will be processed manually later using processBigQueuedRequest() - else if (request.amount > getExpectedRetained() / 2) { - // Inform listeners of this queued request being moved at the end of the queue - emit ActivityEvent( - int256(nextRequestId), - _msgSender(), - Action.Withdraw, - request.amount, - request.amount, - Status.Moved, - int256(withdrawalQueue.length), - "" - ); - - // Remove request from queue - delete withdrawalQueue[nextRequestId]; - - // Append request at the end of the queue - withdrawalQueue.push(request); - } - // - // Else, continue request processing - else { - // Retrieve withdrawal fees and net withdrawn amount - (uint256 withdrawnAmount, uint256 fees) = getWithdrawnAmountAndFees( - request.account, - request.amount - ); - - // Break if the contract doesn't hold enough funds to cover the request - if (withdrawnAmount > usableUnderlyings - cumulatedWithdrawnAmount) break; - - // Accumulate fees and withdrawn amount - cumulatedFees += fees; - cumulatedWithdrawnAmount += withdrawnAmount; - - // Inform listeners of this queued withdrawal processing activity event - emit ActivityEvent( - int256(nextRequestId), - request.account, - Action.Withdraw, - request.amount, - withdrawnAmount, - Status.Success, - NO_ID, - "" - ); - - // Remove request from queue - delete withdrawalQueue[nextRequestId]; - - // Transfer underlying tokens to account. Burning L-Tokens is not required - // as equestWithdrawal() already did it. - // Security note: Re-entrancy warning are disabled as the request has - // just been deleted from the queue, it will so be skipped if trying to - // process it again. - // slither-disable-next-line reentrancy-no-eth - underlying().safeTransfer(request.account, withdrawnAmount); - } - - // Increment next request ID - nextRequestId++; - } - - // Increase unclaimed fees by the amount of cumulated fees - unclaimedFees += cumulatedFees; - - // Decrease usable underlyings by the cumulated amount of withdrawn underlyings - usableUnderlyings -= cumulatedWithdrawnAmount; - - // Decrease total amount queued by the cumulated amount requested - totalQueued -= cumulatedWithdrawnAmount + cumulatedFees; - - // Update new queue cursor - withdrawalQueueCursor = nextRequestId; - - // Retention rate cannot exceeds as the withdrawal decreases both usable - // underlyings and expected retained amounts by the same number and as the - // expected retained amount is a subset of usable underlyings amount. - } - - /** - * @notice Processes a given queued big withdrawal request (one that exceeds half of - * the retention rate). - * @dev In contrast to non-big requests processing, this function will uses to fund - * wallet's balance to fill the request. This allows processing requests that are - * greater than retention rate without having to exceed this rate on the contract. - * @param requestId The ID of the big request to process. - */ - function processBigQueuedRequest(uint256 requestId) external onlyFund whenNotPaused { - // Retrieve request data - WithdrawalRequest memory request = withdrawalQueue[requestId]; - - // Ensure the request is active - require(request.account != address(0), "L66"); - - // Ensure the request emitter has not been blacklisted since request emission - require(!isBlacklisted(request.account), "L50"); - - // Ensure this is indeed a big request - require(request.amount > getExpectedRetained() / 2, "L51"); - + // Remove request from queue + delete withdrawalQueue[nextRequestId]; + + // Append request at the end of the queue + withdrawalQueue.push(request); + } + // + // Else, continue request processing + else { // Retrieve withdrawal fees and net withdrawn amount - (uint256 withdrawnAmount, uint256 fees) = getWithdrawnAmountAndFees( + ( + uint256 withdrawnAmount, + uint256 fees + ) = getWithdrawnAmountAndFees( request.account, request.amount - ); + ); - // Ensure withdrawn amount can be covered by contract + fund wallet balances - uint256 fundBalance = underlying().balanceOf(fund); - require(withdrawnAmount <= usableUnderlyings + fundBalance, "L52"); + // Break if the contract doesn't hold enough funds to cover the request + if ( + withdrawnAmount > + usableUnderlyings - cumulatedWithdrawnAmount + ) break; - // Increase amount of unclaimed fees accordingly - unclaimedFees += fees; - - // Decrease total queued amount by request amount - totalQueued -= request.amount; - - // Increment queue cursor if request was the next request to be processed - if (requestId == withdrawalQueueCursor) withdrawalQueueCursor++; + // Accumulate fees and withdrawn amount + cumulatedFees += fees; + cumulatedWithdrawnAmount += withdrawnAmount; // Inform listeners of this queued withdrawal processing activity event emit ActivityEvent( - int256(requestId), - request.account, - Action.Withdraw, - request.amount, - withdrawnAmount, - Status.Success, - NO_ID, - "" + int256(nextRequestId), + request.account, + Action.Withdraw, + request.amount, + withdrawnAmount, + Status.Success, + NO_ID, + "" ); // Remove request from queue - delete withdrawalQueue[requestId]; - - // If fund wallet's balance can cover request, rely on it only - if (withdrawnAmount <= fundBalance) { - underlying().safeTransferFrom(_msgSender(), request.account, withdrawnAmount); - } - // Else, cover request from both fund wallet and contract balances - else { - // Compute amount missing from fund wallet to cover request - uint256 missingAmount = withdrawnAmount - fundBalance; - - // Decrease usable amount of underlying tokens accordingly - usableUnderlyings -= missingAmount; - - // Transfer entire fund balance to request's emitter - underlying().safeTransferFrom(_msgSender(), request.account, fundBalance); - - // Transfer missing amount from contract balance to request emitter - underlying().safeTransfer(request.account, missingAmount); - } - - // Transfer exceeding underlying tokens to the fund wallet - _transferExceedingToFund(); + delete withdrawalQueue[nextRequestId]; + + // Transfer underlying tokens to account. Burning L-Tokens is not required + // as equestWithdrawal() already did it. + // Security note: Re-entrancy warning are disabled as the request has + // just been deleted from the queue, it will so be skipped if trying to + // process it again. + // slither-disable-next-line reentrancy-no-eth + underlying().safeTransfer(request.account, withdrawnAmount); + } + + // Increment next request ID + nextRequestId++; } - /** - * @notice Cancels a given withdrawal request. The request emitter receive back its - * L-Tokens and no fees will be charged. - * @param requestId The ID of the withdrawal request to cancel. - */ - function cancelWithdrawalRequest( - uint256 requestId - ) public whenNotPaused notBlacklisted(_msgSender()) { - // Retrieve request data - WithdrawalRequest memory request = withdrawalQueue[requestId]; - - // Ensure request belongs to caller - require(_msgSender() == request.account, "L57"); - - // Decrease total amount queued accordingly - totalQueued -= request.amount; + // Increase unclaimed fees by the amount of cumulated fees + unclaimedFees += cumulatedFees; + + // Decrease usable underlyings by the cumulated amount of withdrawn underlyings + usableUnderlyings -= cumulatedWithdrawnAmount; + + // Decrease total amount queued by the cumulated amount requested + totalQueued -= cumulatedWithdrawnAmount + cumulatedFees; + + // Update new queue cursor + withdrawalQueueCursor = nextRequestId; + + // Retention rate cannot exceeds as the withdrawal decreases both usable + // underlyings and expected retained amounts by the same number and as the + // expected retained amount is a subset of usable underlyings amount. + } + + /** + * @notice Processes a given queued big withdrawal request (one that exceeds half of + * the retention rate). + * @dev In contrast to non-big requests processing, this function will uses to fund + * wallet's balance to fill the request. This allows processing requests that are + * greater than retention rate without having to exceed this rate on the contract. + * @param requestId The ID of the big request to process. + */ + function processBigQueuedRequest( + uint256 requestId + ) external onlyFund whenNotPaused { + // Retrieve request data + WithdrawalRequest memory request = withdrawalQueue[requestId]; + + // Ensure the request is active + require(request.account != address(0), "L66"); + + // Ensure the request emitter has not been blacklisted since request emission + require(!isBlacklisted(request.account), "L50"); + + // Ensure this is indeed a big request + require(request.amount > getExpectedRetained() / 2, "L51"); + + // Retrieve withdrawal fees and net withdrawn amount + ( + uint256 withdrawnAmount, + uint256 fees + ) = getWithdrawnAmountAndFees(request.account, request.amount); + + // Ensure withdrawn amount can be covered by contract + fund wallet balances + uint256 fundBalance = underlying().balanceOf(fund); + require( + withdrawnAmount <= usableUnderlyings + fundBalance, + "L52" + ); - // Delete the withdrawal request from queue - delete withdrawalQueue[requestId]; + // Increase amount of unclaimed fees accordingly + unclaimedFees += fees; + + // Decrease total queued amount by request amount + totalQueued -= request.amount; + + // Increment queue cursor if request was the next request to be processed + if (requestId == withdrawalQueueCursor) withdrawalQueueCursor++; + + // Inform listeners of this queued withdrawal processing activity event + emit ActivityEvent( + int256(requestId), + request.account, + Action.Withdraw, + request.amount, + withdrawnAmount, + Status.Success, + NO_ID, + "" + ); - // Inform listeners of this cancelled withdrawal request activity event - emit ActivityEvent( - int256(requestId), - request.account, - Action.Withdraw, - request.amount, - request.amount, - Status.Cancelled, - NO_ID, - "" - ); + // Remove request from queue + delete withdrawalQueue[requestId]; - // Mint back L-Tokens to account - _mint(request.account, uint256(request.amount)); + // If fund wallet's balance can cover request, rely on it only + if (withdrawnAmount <= fundBalance) { + underlying().safeTransferFrom( + _msgSender(), + request.account, + withdrawnAmount + ); + } + // Else, cover request from both fund wallet and contract balances + else { + // Compute amount missing from fund wallet to cover request + uint256 missingAmount = withdrawnAmount - fundBalance; + + // Decrease usable amount of underlying tokens accordingly + usableUnderlyings -= missingAmount; + + // Transfer entire fund balance to request's emitter + underlying().safeTransferFrom( + _msgSender(), + request.account, + fundBalance + ); + + // Transfer missing amount from contract balance to request emitter + underlying().safeTransfer(request.account, missingAmount); } - /** - * @notice Used by the fund wallet to repatriate underlying tokens on the contract - * whenever those are required to fulfill some withdrawal requests. - * @dev The function will revert if repatriated amount makes the contract exceeding - * the retention rate. - * @param amount The amount of underlying tokens to repatriate. - */ - function repatriate(uint256 amount) external onlyFund whenNotPaused { - // Ensure the fund wallet has enough funds to repatriate - require(amount <= underlying().balanceOf(fund), "L58"); - - // Calculate new contract usable balance - uint256 newBalance = usableUnderlyings + amount; - - // Ensure the new balance doesn't exceed the retention rate - require(newBalance <= getExpectedRetained(), "L59"); - - // Increase usable underlyings amount by repatriated amount - usableUnderlyings += amount; + // Transfer exceeding underlying tokens to the fund wallet + _transferExceedingToFund(); + } + + /** + * @notice Cancels a given withdrawal request. The request emitter receive back its + * L-Tokens and no fees will be charged. + * @param requestId The ID of the withdrawal request to cancel. + */ + function cancelWithdrawalRequest( + uint256 requestId + ) public whenNotPaused notBlacklisted(_msgSender()) { + // Retrieve request data + WithdrawalRequest memory request = withdrawalQueue[requestId]; + + // Ensure request belongs to caller + require(_msgSender() == request.account, "L57"); + + // Decrease total amount queued accordingly + totalQueued -= request.amount; + + // Delete the withdrawal request from queue + delete withdrawalQueue[requestId]; + + // Inform listeners of this cancelled withdrawal request activity event + emit ActivityEvent( + int256(requestId), + request.account, + Action.Withdraw, + request.amount, + request.amount, + Status.Cancelled, + NO_ID, + "" + ); - // Transfer amount from fund wallet to contract - underlying().safeTransferFrom(_msgSender(), address(this), amount); - } + // Mint back L-Tokens to account + _mint(request.account, uint256(request.amount)); + } + + /** + * @notice Used by the fund wallet to repatriate underlying tokens on the contract + * whenever those are required to fulfill some withdrawal requests. + * @dev The function will revert if repatriated amount makes the contract exceeding + * the retention rate. + * @param amount The amount of underlying tokens to repatriate. + */ + function repatriate( + uint256 amount + ) external onlyFund whenNotPaused { + // Ensure the fund wallet has enough funds to repatriate + require(amount <= underlying().balanceOf(fund), "L58"); + + // Calculate new contract usable balance + uint256 newBalance = usableUnderlyings + amount; + + // Ensure the new balance doesn't exceed the retention rate + require(newBalance <= getExpectedRetained(), "L59"); + + // Increase usable underlyings amount by repatriated amount + usableUnderlyings += amount; + + // Transfer amount from fund wallet to contract + underlying().safeTransferFrom( + _msgSender(), + address(this), + amount + ); + } - /// @notice Used by owner to claim fees generated from successful withdrawals. - function claimFees() external onlyOwner { - // Ensure there are some fees to claim - require(unclaimedFees > 0, "L60"); + /// @notice Used by owner to claim fees generated from successful withdrawals. + function claimFees() external onlyOwner { + // Ensure there are some fees to claim + require(unclaimedFees > 0, "L60"); - // Ensure the contract holds enough underlying tokens to cover fees - require(usableUnderlyings >= unclaimedFees, "L61"); + // Ensure the contract holds enough underlying tokens to cover fees + require(usableUnderlyings >= unclaimedFees, "L61"); - // Decrease usable underlyings amount accordingly - usableUnderlyings -= unclaimedFees; + // Decrease usable underlyings amount accordingly + usableUnderlyings -= unclaimedFees; - // Store fees amount in memory and reset unclaimed fees amount - uint256 fees = unclaimedFees; - unclaimedFees = 0; + // Store fees amount in memory and reset unclaimed fees amount + uint256 fees = unclaimedFees; + unclaimedFees = 0; - // Transfer unclaimed fees to owner - underlying().safeTransfer(owner(), fees); - } + // Transfer unclaimed fees to owner + underlying().safeTransfer(owner(), fees); + } } diff --git a/contracts/src/LTokenSignaler.sol b/contracts/src/LTokenSignaler.sol index e9f7f855..a2977b84 100644 --- a/contracts/src/LTokenSignaler.sol +++ b/contracts/src/LTokenSignaler.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalOwnableUpgradeable} from "./abstracts/GlobalOwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalOwnableUpgradeable } from "./abstracts/GlobalOwnableUpgradeable.sol"; /** * @title LTokenSignaler @@ -17,46 +17,52 @@ import {GlobalOwnableUpgradeable} from "./abstracts/GlobalOwnableUpgradeable.sol * * @custom:security-contact security@ledgity.com */ -contract LTokenSignaler is Initializable, UUPSUpgradeable, GlobalOwnableUpgradeable { - /** - * @notice Emitted to inform subgraph of the existence of a new L-Token contract. - * @param lTokenAddress The address of the L-Token contract to signal. - */ - event LTokenSignalEvent(address indexed lTokenAddress); +contract LTokenSignaler is + Initializable, + UUPSUpgradeable, + GlobalOwnableUpgradeable +{ + /** + * @notice Emitted to inform subgraph of the existence of a new L-Token contract. + * @param lTokenAddress The address of the L-Token contract to signal. + */ + event LTokenSignalEvent(address indexed lTokenAddress); - /** - * @notice Prevents implementation contract from being initialized as recommended by - * OpenZeppelin. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- - * @custom:oz-upgrades-unsafe-allow constructor - */ - constructor() { - _disableInitializers(); - } + /** + * @notice Prevents implementation contract from being initialized as recommended by + * OpenZeppelin. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- + * @custom:oz-upgrades-unsafe-allow constructor + */ + constructor() { + _disableInitializers(); + } - /** - * @notice Initializer function of the contract. It replaces the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - */ - function initialize(address globalOwner_) public initializer { - __GlobalOwnable_init(globalOwner_); - __UUPSUpgradeable_init(); - } + /** + * @notice Initializer function of the contract. It replaces the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + */ + function initialize(address globalOwner_) public initializer { + __GlobalOwnable_init(globalOwner_); + __UUPSUpgradeable_init(); + } - /** - * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to - * global owner. It is called by the proxy contract during an upgrade. - * @param newImplementation The address of the new implementation contract. - */ - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + /** + * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to + * global owner. It is called by the proxy contract during an upgrade. + * @param newImplementation The address of the new implementation contract. + */ + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} - /** - * @notice Signals a LToken contract to the TheGraph subgraph of the current chain. - * @param lTokenAddress The address of the LToken contract to signal. - */ - function signalLToken(address lTokenAddress) external onlyOwner { - // Signal the LToken contract - emit LTokenSignalEvent(lTokenAddress); - } + /** + * @notice Signals a LToken contract to the TheGraph subgraph of the current chain. + * @param lTokenAddress The address of the LToken contract to signal. + */ + function signalLToken(address lTokenAddress) external onlyOwner { + // Signal the LToken contract + emit LTokenSignalEvent(lTokenAddress); + } } diff --git a/contracts/src/PreMining.sol b/contracts/src/PreMining.sol index 4c18dcf8..df6e8891 100644 --- a/contracts/src/PreMining.sol +++ b/contracts/src/PreMining.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {LToken} from "./LToken.sol"; -import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; -import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol"; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { LToken } from "./LToken.sol"; +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import { Ownable2Step } from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import { Pausable } from "@openzeppelin/contracts/security/Pausable.sol"; /** * @title PreMining @@ -41,415 +41,442 @@ import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol"; * @custom:security-contact security@ledgity.com */ contract PreMining is Ownable2Step, Pausable { - using SafeERC20 for IERC20; - - /** - * @notice Represents the lock information of an account. - * @param amount Amount of underlying tokens locked. - * @param duration Duration of the lock (in months). - * @param hasUnlocked Whether the account has unlocked its locked tokens. - * @param claimedRewards Amount of LDY rewards already claimed. - * @param lockEndTimestamp Timestamp at which the account's lock ends. - */ - struct AccountLock { - uint240 amount; - uint8 duration; - bool hasUnlocked; - uint216 claimedRewards; - uint40 lockEndTimestamp; + using SafeERC20 for IERC20; + + /** + * @notice Represents the lock information of an account. + * @param amount Amount of underlying tokens locked. + * @param duration Duration of the lock (in months). + * @param hasUnlocked Whether the account has unlocked its locked tokens. + * @param claimedRewards Amount of LDY rewards already claimed. + * @param lockEndTimestamp Timestamp at which the account's lock ends. + */ + struct AccountLock { + uint240 amount; + uint8 duration; + bool hasUnlocked; + uint216 claimedRewards; + uint40 lockEndTimestamp; + } + + /// @notice Holds the amount of LDY to be distributed to lockers. + uint256 public immutable maxDistributedLDY; + + /// @notice Holds the maximum total amount of L-Tokens that can be locked. + uint256 public immutable lockedHardCap; + + /// @notice Holds the minimum possible lock duration (in months). + uint8 public immutable minLockDuration; + + /// @notice Holds the maximum possible lock duration (in months). + uint8 public immutable maxLockDuration; + + /// @notice Holds the duration of LDY rewards vesting (in months). + uint8 public immutable vestingDuration; + + /// @notice Holds a reference to the locked L-Token contract. + LToken public immutable lToken; + + /// @notice Holds a reference to the L-Token underlying stablecoin. + IERC20 public immutable underlyingToken; + + /// @notice Holds the max pool weight. + uint256 public immutable maxWeight; + + /// @notice Holds a reference to the LDY token contract. + IERC20 public ldyToken; + + /// @notice Holds lockers' participations informations. + mapping(address => AccountLock) public accountsLocks; + + /// @notice Holds the total amount of locked underlying tokens. + uint256 public totalLocked; + + /// @notice Holds whether the Deposit phase has ended. + bool public hasDepositPhaseEnded; + + /// @notice Holds whether the Claim phase has started. + bool public hasClaimPhaseStarted; + + /// @notice Holds whether the Recovery phase has started. + bool public hasRecoveryPhaseStarted; + + /// @notice Holds the timestamp at which the Claim phase started. + uint256 public claimPhaseStartTimestamp; + + /// @notice Holds an ordered queue of accounts that requested to unlock their tokens. + address[] public unlockRequests; + + /// @notice Holds the index of the first request in the queue (a.k.a, next one to be processed). + uint256 public unlockRequestsCursor; + + /// @notice Emitted to inform about a new lock/deposit. + event Lock(address indexed account, uint256 amount, uint8 duration); + + /// @notice Top-level checks and code shared by both unlock functions. + modifier safeUnlock() { + // Ensure that the account's lock has ended + require( + accountsLocks[msg.sender].lockEndTimestamp <= block.timestamp, + "L68" + ); + + // Ensure the account hasn't already unlocked its tokens + require(!accountsLocks[msg.sender].hasUnlocked, "L69"); + + // Ensure the account has something to unlock + require(accountsLocks[msg.sender].amount > 0, "L70"); + + // Indicate that account has unlocked its tokens + accountsLocks[msg.sender].hasUnlocked = true; + _; + } + + /** + * @notice This constructor function etches the lockdrop terms in immutable states. + * Ensuring that those terms cannot be modified after deployment. + * @param lTokenAddress_ Address of the L-Token contract to use. + * @param maxDistributedLDY_ Amount of LDY to be distributed to lockers. + * @param lockedHardCap_ Maximum total amount of L-Tokens that can be locked. + * @param minLockDuration_ Minimum possible lock duration (in months). + * @param maxLockDuration_ Maximum possible lock duration (in months). + * @param vestingDuration_ Duration of LDY rewards vesting (in months). + */ + constructor( + address lTokenAddress_, + uint256 maxDistributedLDY_, + uint256 lockedHardCap_, + uint8 minLockDuration_, + uint8 maxLockDuration_, + uint8 vestingDuration_ + ) { + // Ensure minLockDuration is at least 1 month + require(minLockDuration_ >= 1, "L72"); + + // Ensure minLockDuration is not greater than maxLockDuration + require(minLockDuration_ <= maxLockDuration_, "L73"); + + // Set immutable states + lToken = LToken(lTokenAddress_); + underlyingToken = IERC20(address(lToken.underlying())); + lockedHardCap = lockedHardCap_; + maxDistributedLDY = maxDistributedLDY_; + minLockDuration = minLockDuration_; + maxLockDuration = maxLockDuration_; + vestingDuration = vestingDuration_; + maxWeight = lockedHardCap * uint256(maxLockDuration); + } + + /** + * @notice Public implementation of Pausable's pausing and unpausing functions, but + * restricted to contract's owner. + */ + function pause() public onlyOwner { + _pause(); + } + + function unpause() public onlyOwner { + _unpause(); + } + + /** + * @notice Updates the LDY token contract address. + * @dev As the first Ledgity Yield lockdrop campaigns will start before the LDY TGE, + * this function allows the contract's owner to set the LDY token address once it + * becomes available. + * @param ldyTokenAddress Address of the LDY token contract. + */ + function setLDYToken(address ldyTokenAddress) external onlyOwner { + // Prevent owner from changing the LDY address after Claim phase has started + require(!hasClaimPhaseStarted, "L74"); + + // Set LDY token address + ldyToken = IERC20(ldyTokenAddress); + } + + /** + * @notice Closes the Deposit phase. After calling this function, account won't be + * able to lock additional underlying tokens anymore. + */ + function endDepositPhase() external onlyOwner { + hasDepositPhaseEnded = true; + } + + /** + * @notice Opens the Claim phase. After calling this function, lockers will be able + * to start claiming their LDY rewards. + */ + function startClaimPhase() external onlyOwner { + // Ensure Claim phase has not already started + require(!hasClaimPhaseStarted, "L76"); + + // Ensure that LDY token address is available + require(address(ldyToken) != address(0), "L77"); + + // Set Claim phase as started and store the start timestamp + hasClaimPhaseStarted = true; + claimPhaseStartTimestamp = block.timestamp; + } + + /** + * @notice Opens the Recovery phase. After calling this function, the contract owner + * will be able to recover remaining ERC20 tokens on the contract. + * Note that this won't close the Claim phase and lockers will still be able to claim + * their LDY rewards. + */ + function startRecoveryPhase() external onlyOwner { + // Ensure Claim phase has started + require(hasClaimPhaseStarted, "L79"); + + // Compute some durations in seconds + uint256 threeMonthsInSecond = 3 * 30 days; + uint256 vestingInSecond = uint256(vestingDuration) * 30 days; + uint256 maxLockInSecond = uint256(maxLockDuration) * 30 days; + + // Compute timestamp of vesting end + 3 months + uint256 afterVestingTimestamp = claimPhaseStartTimestamp + + vestingInSecond + + threeMonthsInSecond; + + // Ensure we are at least 3 months after the end of reward vesting + // This prevents owner from recovering LDY before lockers can claim their rewards + require(block.timestamp >= afterVestingTimestamp, "L80"); + + // Compute end of maximum lock + 3 months + // Note that claimPhaseStartTimestamp is used for simplicity even if it can exist a time + // span between Deposit and Claim phases. + uint256 afterMaxLockTimestamp = claimPhaseStartTimestamp + + maxLockInSecond + + threeMonthsInSecond; + + // Ensure we are at least 3 months after the maximum lock end + // This prevents owner from recovering underlying tokens before lockers can unlock those + require(block.timestamp >= afterMaxLockTimestamp, "L81"); + + // Set recovery phase as started + hasRecoveryPhaseStarted = true; + } + + /** + * @notice Recovers a specified amount of a given token address. Will revert if + * recovery phase has not started yet or if the contract doesn't hold enough tokens. + * @param tokenAddress The address of the token to recover. + * @param amount The amount of token to recover. + */ + function recoverERC20( + address tokenAddress, + uint256 amount + ) external onlyOwner { + // Ensure recovery phase has started + require(hasRecoveryPhaseStarted, "L82"); + + // Create a reference to token's contract + IERC20 tokenContract = IERC20(tokenAddress); + + // Ensure there is enough tokens to recover + require(tokenContract.balanceOf(address(this)) >= amount, "L83"); + + // Transfer the recovered token amount to the sender (owner) + tokenContract.safeTransfer(msg.sender, amount); + } + + /** + * @notice Compute the total amount of LDY rewards that a given account is eligible to. + * @dev Note: This function neither considers vesting nor already claimed rewards. + * @param account The account to compute the eligible rewards of. + * @return The total amount of LDY rewards that the account is eligible to. + */ + function eligibleRewardsOf( + address account + ) public view returns (uint256) { + // Compute account's lock weight + uint256 lockerWeight = accountsLocks[account].amount * + accountsLocks[account].duration; + + // Compute amount of LDY that this locker is eligible to + if (maxWeight == 0) return 0; + else return (maxDistributedLDY * lockerWeight) / maxWeight; + } + + /** + * @notice Allows locking a specified amount of underlying tokens for a given duration. + * By locking, an account became eligible to a portion of the distributed LDY rewards. + * @dev This function proxies LToken.deposit() + * @dev Lockers can extend their lock duration by calling this function again with a + * greater duration and 0 as amount. + * @param amount Amount of underlying tokens to lock. + * @param duration Duration of the lock (in months). + */ + function lock( + uint256 amount, + uint8 duration + ) external whenNotPaused { + // Ensure Deposit phase has not ended yet + require(!hasDepositPhaseEnded, "L84"); + + // Ensure account hasn't already unlocked a past lock + require(!accountsLocks[msg.sender].hasUnlocked, "L71"); + + // Ensure lock duration is in valid range + require( + duration >= minLockDuration && duration <= maxLockDuration, + "L85" + ); + + // Ensure it won't exceed the hardcap + require(totalLocked + amount <= uint256(lockedHardCap), "L86"); + + // Increase account's locked amount + accountsLocks[msg.sender].amount += uint240(amount); + + // Increase total locked amount accordingly + totalLocked += amount; + + // Use existing lock duration if greater than the new one + uint8 existingDuration = accountsLocks[msg.sender].duration; + uint8 appliedDuration = existingDuration > duration + ? existingDuration + : duration; + + // Update account's lock duration + accountsLocks[msg.sender].duration = appliedDuration; + + // Update account's lock end timestamp + accountsLocks[msg.sender].lockEndTimestamp = uint40( + block.timestamp + uint40(appliedDuration) * 30 days + ); + + // Emit a Lock event + emit Lock(msg.sender, amount, appliedDuration); + + // If amount is 0, skip deposit + if (amount == 0) return; + + // Transfer underlyingToken from account to contract + underlyingToken.safeTransferFrom( + msg.sender, + address(this), + amount + ); + + // Deposit USDC in the L-Token contract + underlyingToken.safeApprove(address(lToken), amount); + lToken.deposit(amount, ""); + } + + /** + * @notice Allows the caller to instaneously unlock its locked amount of underlying + * tokens. + * @dev In order to save some gas and time to users, frontends should propose this + * function to users only when it has been verified that it will not revert. They + * should propose the requestUnlock() function otherwise. + */ + function instantUnlock() external whenNotPaused safeUnlock { + // Retrieve underlying tokens from the L-Token contract + uint256 unlockedAmount = accountsLocks[msg.sender].amount; + lToken.instantWithdrawal(unlockedAmount); + + // Transfer underlying tokens back to caller + underlyingToken.safeTransfer(msg.sender, unlockedAmount); + } + + /** + * @notice Allows the call to request for the unlocking of its locked amount of + * underlying tokens. The request will be automatically processed later. + * @dev The sender must attach 0.003 ETH to pre-pay the future processing gas fees + * paid by the withdrawer wallet. + */ + function requestUnlock() external payable whenNotPaused safeUnlock { + // Put account in the unlock requests queue + unlockRequests.push(msg.sender); + + // Request underlying tokens to the L-Token contract + uint256 unlockedAmount = accountsLocks[msg.sender].amount; + lToken.requestWithdrawal{ value: msg.value }(unlockedAmount); + } + + /** + * @notice Processes queued unlock requests until there is else no more requests, + * else not enough underlying tokens to continue. + */ + function processUnlockRequests() external onlyOwner { + // Store the current request ID to process + uint256 processedId = unlockRequestsCursor; + + // Loop over remaining requests + while (processedId < unlockRequests.length) { + // Prevent OOG by stopping request processing if there is not enough gas left + // to continue the loop and properly end the function call. + if (gasleft() < 45000) break; + + // Retrieve the request account + address unlockAccount = unlockRequests[processedId]; + + // Retrieve the unlocked amount + uint256 unlockAmount = accountsLocks[unlockAccount].amount; + + // If the request has already been processed, skip it + if (unlockAccount != address(0)) { + // If the contract doesn't hold enough underlying tokens to process the request, stop here + if (underlyingToken.balanceOf(address(this)) < unlockAmount) + break; + + // Delete the request + delete unlockRequests[processedId]; + + // Transfer underlying back to account + underlyingToken.safeTransfer(unlockAccount, unlockAmount); + } + + // Increment processed request ID + processedId++; } - /// @notice Holds the amount of LDY to be distributed to lockers. - uint256 public immutable maxDistributedLDY; - - /// @notice Holds the maximum total amount of L-Tokens that can be locked. - uint256 public immutable lockedHardCap; - - /// @notice Holds the minimum possible lock duration (in months). - uint8 public immutable minLockDuration; - - /// @notice Holds the maximum possible lock duration (in months). - uint8 public immutable maxLockDuration; - - /// @notice Holds the duration of LDY rewards vesting (in months). - uint8 public immutable vestingDuration; - - /// @notice Holds a reference to the locked L-Token contract. - LToken public immutable lToken; - - /// @notice Holds a reference to the L-Token underlying stablecoin. - IERC20 public immutable underlyingToken; - - /// @notice Holds the max pool weight. - uint256 public immutable maxWeight; - - /// @notice Holds a reference to the LDY token contract. - IERC20 public ldyToken; - - /// @notice Holds lockers' participations informations. - mapping(address => AccountLock) public accountsLocks; - - /// @notice Holds the total amount of locked underlying tokens. - uint256 public totalLocked; - - /// @notice Holds whether the Deposit phase has ended. - bool public hasDepositPhaseEnded; - - /// @notice Holds whether the Claim phase has started. - bool public hasClaimPhaseStarted; - - /// @notice Holds whether the Recovery phase has started. - bool public hasRecoveryPhaseStarted; - - /// @notice Holds the timestamp at which the Claim phase started. - uint256 public claimPhaseStartTimestamp; - - /// @notice Holds an ordered queue of accounts that requested to unlock their tokens. - address[] public unlockRequests; - - /// @notice Holds the index of the first request in the queue (a.k.a, next one to be processed). - uint256 public unlockRequestsCursor; - - /// @notice Emitted to inform about a new lock/deposit. - event Lock(address indexed account, uint256 amount, uint8 duration); - - /// @notice Top-level checks and code shared by both unlock functions. - modifier safeUnlock() { - // Ensure that the account's lock has ended - require(accountsLocks[msg.sender].lockEndTimestamp <= block.timestamp, "L68"); - - // Ensure the account hasn't already unlocked its tokens - require(!accountsLocks[msg.sender].hasUnlocked, "L69"); - - // Ensure the account has something to unlock - require(accountsLocks[msg.sender].amount > 0, "L70"); - - // Indicate that account has unlocked its tokens - accountsLocks[msg.sender].hasUnlocked = true; - _; - } - - /** - * @notice This constructor function etches the lockdrop terms in immutable states. - * Ensuring that those terms cannot be modified after deployment. - * @param lTokenAddress_ Address of the L-Token contract to use. - * @param maxDistributedLDY_ Amount of LDY to be distributed to lockers. - * @param lockedHardCap_ Maximum total amount of L-Tokens that can be locked. - * @param minLockDuration_ Minimum possible lock duration (in months). - * @param maxLockDuration_ Maximum possible lock duration (in months). - * @param vestingDuration_ Duration of LDY rewards vesting (in months). - */ - constructor( - address lTokenAddress_, - uint256 maxDistributedLDY_, - uint256 lockedHardCap_, - uint8 minLockDuration_, - uint8 maxLockDuration_, - uint8 vestingDuration_ - ) { - // Ensure minLockDuration is at least 1 month - require(minLockDuration_ >= 1, "L72"); - - // Ensure minLockDuration is not greater than maxLockDuration - require(minLockDuration_ <= maxLockDuration_, "L73"); - - // Set immutable states - lToken = LToken(lTokenAddress_); - underlyingToken = IERC20(address(lToken.underlying())); - lockedHardCap = lockedHardCap_; - maxDistributedLDY = maxDistributedLDY_; - minLockDuration = minLockDuration_; - maxLockDuration = maxLockDuration_; - vestingDuration = vestingDuration_; - maxWeight = lockedHardCap * uint256(maxLockDuration); - } - - /** - * @notice Public implementation of Pausable's pausing and unpausing functions, but - * restricted to contract's owner. - */ - function pause() public onlyOwner { - _pause(); - } - - function unpause() public onlyOwner { - _unpause(); - } - - /** - * @notice Updates the LDY token contract address. - * @dev As the first Ledgity Yield lockdrop campaigns will start before the LDY TGE, - * this function allows the contract's owner to set the LDY token address once it - * becomes available. - * @param ldyTokenAddress Address of the LDY token contract. - */ - function setLDYToken(address ldyTokenAddress) external onlyOwner { - // Prevent owner from changing the LDY address after Claim phase has started - require(!hasClaimPhaseStarted, "L74"); - - // Set LDY token address - ldyToken = IERC20(ldyTokenAddress); - } - - /** - * @notice Closes the Deposit phase. After calling this function, account won't be - * able to lock additional underlying tokens anymore. - */ - function endDepositPhase() external onlyOwner { - hasDepositPhaseEnded = true; - } - - /** - * @notice Opens the Claim phase. After calling this function, lockers will be able - * to start claiming their LDY rewards. - */ - function startClaimPhase() external onlyOwner { - // Ensure Claim phase has not already started - require(!hasClaimPhaseStarted, "L76"); - - // Ensure that LDY token address is available - require(address(ldyToken) != address(0), "L77"); - - // Set Claim phase as started and store the start timestamp - hasClaimPhaseStarted = true; - claimPhaseStartTimestamp = block.timestamp; - } - - /** - * @notice Opens the Recovery phase. After calling this function, the contract owner - * will be able to recover remaining ERC20 tokens on the contract. - * Note that this won't close the Claim phase and lockers will still be able to claim - * their LDY rewards. - */ - function startRecoveryPhase() external onlyOwner { - // Ensure Claim phase has started - require(hasClaimPhaseStarted, "L79"); - - // Compute some durations in seconds - uint256 threeMonthsInSecond = 3 * 30 days; - uint256 vestingInSecond = uint256(vestingDuration) * 30 days; - uint256 maxLockInSecond = uint256(maxLockDuration) * 30 days; - - // Compute timestamp of vesting end + 3 months - uint256 afterVestingTimestamp = claimPhaseStartTimestamp + - vestingInSecond + - threeMonthsInSecond; - - // Ensure we are at least 3 months after the end of reward vesting - // This prevents owner from recovering LDY before lockers can claim their rewards - require(block.timestamp >= afterVestingTimestamp, "L80"); - - // Compute end of maximum lock + 3 months - // Note that claimPhaseStartTimestamp is used for simplicity even if it can exist a time - // span between Deposit and Claim phases. - uint256 afterMaxLockTimestamp = claimPhaseStartTimestamp + - maxLockInSecond + - threeMonthsInSecond; - - // Ensure we are at least 3 months after the maximum lock end - // This prevents owner from recovering underlying tokens before lockers can unlock those - require(block.timestamp >= afterMaxLockTimestamp, "L81"); - - // Set recovery phase as started - hasRecoveryPhaseStarted = true; - } - - /** - * @notice Recovers a specified amount of a given token address. Will revert if - * recovery phase has not started yet or if the contract doesn't hold enough tokens. - * @param tokenAddress The address of the token to recover. - * @param amount The amount of token to recover. - */ - function recoverERC20(address tokenAddress, uint256 amount) external onlyOwner { - // Ensure recovery phase has started - require(hasRecoveryPhaseStarted, "L82"); - - // Create a reference to token's contract - IERC20 tokenContract = IERC20(tokenAddress); - - // Ensure there is enough tokens to recover - require(tokenContract.balanceOf(address(this)) >= amount, "L83"); - - // Transfer the recovered token amount to the sender (owner) - tokenContract.safeTransfer(msg.sender, amount); - } - - /** - * @notice Compute the total amount of LDY rewards that a given account is eligible to. - * @dev Note: This function neither considers vesting nor already claimed rewards. - * @param account The account to compute the eligible rewards of. - * @return The total amount of LDY rewards that the account is eligible to. - */ - function eligibleRewardsOf(address account) public view returns (uint256) { - // Compute account's lock weight - uint256 lockerWeight = accountsLocks[account].amount * accountsLocks[account].duration; - - // Compute amount of LDY that this locker is eligible to - if (maxWeight == 0) return 0; - else return (maxDistributedLDY * lockerWeight) / maxWeight; - } - - /** - * @notice Allows locking a specified amount of underlying tokens for a given duration. - * By locking, an account became eligible to a portion of the distributed LDY rewards. - * @dev This function proxies LToken.deposit() - * @dev Lockers can extend their lock duration by calling this function again with a - * greater duration and 0 as amount. - * @param amount Amount of underlying tokens to lock. - * @param duration Duration of the lock (in months). - */ - function lock(uint256 amount, uint8 duration) external whenNotPaused { - // Ensure Deposit phase has not ended yet - require(!hasDepositPhaseEnded, "L84"); - - // Ensure account hasn't already unlocked a past lock - require(!accountsLocks[msg.sender].hasUnlocked, "L71"); - - // Ensure lock duration is in valid range - require(duration >= minLockDuration && duration <= maxLockDuration, "L85"); - - // Ensure it won't exceed the hardcap - require(totalLocked + amount <= uint256(lockedHardCap), "L86"); - - // Increase account's locked amount - accountsLocks[msg.sender].amount += uint240(amount); - - // Increase total locked amount accordingly - totalLocked += amount; - - // Use existing lock duration if greater than the new one - uint8 existingDuration = accountsLocks[msg.sender].duration; - uint8 appliedDuration = existingDuration > duration ? existingDuration : duration; - - // Update account's lock duration - accountsLocks[msg.sender].duration = appliedDuration; - - // Update account's lock end timestamp - accountsLocks[msg.sender].lockEndTimestamp = uint40( - block.timestamp + uint40(appliedDuration) * 30 days - ); - - // Emit a Lock event - emit Lock(msg.sender, amount, appliedDuration); - - // If amount is 0, skip deposit - if (amount == 0) return; - - // Transfer underlyingToken from account to contract - underlyingToken.safeTransferFrom(msg.sender, address(this), amount); - - // Deposit USDC in the L-Token contract - underlyingToken.safeApprove(address(lToken), amount); - lToken.deposit(amount, ""); - } - - /** - * @notice Allows the caller to instaneously unlock its locked amount of underlying - * tokens. - * @dev In order to save some gas and time to users, frontends should propose this - * function to users only when it has been verified that it will not revert. They - * should propose the requestUnlock() function otherwise. - */ - function instantUnlock() external whenNotPaused safeUnlock { - // Retrieve underlying tokens from the L-Token contract - uint256 unlockedAmount = accountsLocks[msg.sender].amount; - lToken.instantWithdrawal(unlockedAmount); - - // Transfer underlying tokens back to caller - underlyingToken.safeTransfer(msg.sender, unlockedAmount); - } - - /** - * @notice Allows the call to request for the unlocking of its locked amount of - * underlying tokens. The request will be automatically processed later. - * @dev The sender must attach 0.003 ETH to pre-pay the future processing gas fees - * paid by the withdrawer wallet. - */ - function requestUnlock() external payable whenNotPaused safeUnlock { - // Put account in the unlock requests queue - unlockRequests.push(msg.sender); - - // Request underlying tokens to the L-Token contract - uint256 unlockedAmount = accountsLocks[msg.sender].amount; - lToken.requestWithdrawal{value: msg.value}(unlockedAmount); - } - - /** - * @notice Processes queued unlock requests until there is else no more requests, - * else not enough underlying tokens to continue. - */ - function processUnlockRequests() external onlyOwner { - // Store the current request ID to process - uint256 processedId = unlockRequestsCursor; - - // Loop over remaining requests - while (processedId < unlockRequests.length) { - // Prevent OOG by stopping request processing if there is not enough gas left - // to continue the loop and properly end the function call. - if (gasleft() < 45000) break; - - // Retrieve the request account - address unlockAccount = unlockRequests[processedId]; - - // Retrieve the unlocked amount - uint256 unlockAmount = accountsLocks[unlockAccount].amount; - - // If the request has already been processed, skip it - if (unlockAccount != address(0)) { - // If the contract doesn't hold enough underlying tokens to process the request, stop here - if (underlyingToken.balanceOf(address(this)) < unlockAmount) break; - - // Delete the request - delete unlockRequests[processedId]; - - // Transfer underlying back to account - underlyingToken.safeTransfer(unlockAccount, unlockAmount); - } - - // Increment processed request ID - processedId++; - } - - // Write back the cursor in storage - unlockRequestsCursor = processedId; - } - - /** - * @notice Computes the amount of LDY rewards available to claim for a given account. - * @dev This function considers vesting and already claimed rewards. - * @param account The account to compute the available rewards of. - * @return The amount of LDY rewards available to claim. - */ - function availableToClaim(address account) public view returns (uint256) { - // Compute total amount of rewards allocated to this locker - uint256 totalEligibleRewards = eligibleRewardsOf(account); - - // Compute vesting duration in seconds - uint256 vestingInSeconds = uint256(vestingDuration) * 30 days; - - // Compute elapsed months since claim phase started, and cap it to vesting duration - uint256 elapsedTime = block.timestamp - claimPhaseStartTimestamp; - if (elapsedTime > vestingInSeconds) elapsedTime = vestingInSeconds; - - // Compute total available to claim (proportionally to elapsed time) - uint256 totalAvailableToClaim = (totalEligibleRewards * elapsedTime) / vestingInSeconds; - - // Else return net claimable (available minus already claimed) - return totalAvailableToClaim - accountsLocks[account].claimedRewards; - } - - /// @notice Allows the caller to claim its available LDY rewards. - function claimRewards() external whenNotPaused { - // Ensure Claim phase has started - require(hasClaimPhaseStarted, "L87"); - - // Compute claimable LDY rewards - uint256 claimableLDY = availableToClaim(msg.sender); - - // Increase account claimed amount accordingly - accountsLocks[msg.sender].claimedRewards += uint216(claimableLDY); - - // Transfer rewards to account - ldyToken.safeTransfer(msg.sender, claimableLDY); - } + // Write back the cursor in storage + unlockRequestsCursor = processedId; + } + + /** + * @notice Computes the amount of LDY rewards available to claim for a given account. + * @dev This function considers vesting and already claimed rewards. + * @param account The account to compute the available rewards of. + * @return The amount of LDY rewards available to claim. + */ + function availableToClaim( + address account + ) public view returns (uint256) { + // Compute total amount of rewards allocated to this locker + uint256 totalEligibleRewards = eligibleRewardsOf(account); + + // Compute vesting duration in seconds + uint256 vestingInSeconds = uint256(vestingDuration) * 30 days; + + // Compute elapsed months since claim phase started, and cap it to vesting duration + uint256 elapsedTime = block.timestamp - claimPhaseStartTimestamp; + if (elapsedTime > vestingInSeconds) + elapsedTime = vestingInSeconds; + + // Compute total available to claim (proportionally to elapsed time) + uint256 totalAvailableToClaim = (totalEligibleRewards * + elapsedTime) / vestingInSeconds; + + // Else return net claimable (available minus already claimed) + return + totalAvailableToClaim - accountsLocks[account].claimedRewards; + } + + /// @notice Allows the caller to claim its available LDY rewards. + function claimRewards() external whenNotPaused { + // Ensure Claim phase has started + require(hasClaimPhaseStarted, "L87"); + + // Compute claimable LDY rewards + uint256 claimableLDY = availableToClaim(msg.sender); + + // Increase account claimed amount accordingly + accountsLocks[msg.sender].claimedRewards += uint216(claimableLDY); + + // Transfer rewards to account + ldyToken.safeTransfer(msg.sender, claimableLDY); + } } diff --git a/contracts/src/abstracts/GlobalOwnableUpgradeable.sol b/contracts/src/abstracts/GlobalOwnableUpgradeable.sol index f69ac262..f5a43999 100644 --- a/contracts/src/abstracts/GlobalOwnableUpgradeable.sol +++ b/contracts/src/abstracts/GlobalOwnableUpgradeable.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import {GlobalOwner} from "../GlobalOwner.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { GlobalOwner } from "../GlobalOwner.sol"; /** * @title GlobalOwnableUpgradeable @@ -21,68 +21,77 @@ import {GlobalOwner} from "../GlobalOwner.sol"; * @dev For further details, see "GlobalOwnableUpgradeable" section of whitepaper. * @custom:security-contact security@ledgity.com */ -abstract contract GlobalOwnableUpgradeable is Initializable, OwnableUpgradeable { - /** - * @notice The GlobalOwner contract the ownership will be inherited from. - * @dev This state is private so derived contracts cannot change its value. - */ - GlobalOwner private _globalOwner; +abstract contract GlobalOwnableUpgradeable is + Initializable, + OwnableUpgradeable +{ + /** + * @notice The GlobalOwner contract the ownership will be inherited from. + * @dev This state is private so derived contracts cannot change its value. + */ + GlobalOwner private _globalOwner; - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - */ - function __GlobalOwnable_init(address globalOwner_) internal onlyInitializing { - __GlobalOwnable_init_unchained(globalOwner_); - // Note: __Ownable_init() doesn't have to be called as the overriden owner() - // function no longer rely on the _owner state. Since __Ownable_init() only sets - // the initial _owner value, calling it would have no effect. - } + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + */ + function __GlobalOwnable_init( + address globalOwner_ + ) internal onlyInitializing { + __GlobalOwnable_init_unchained(globalOwner_); + // Note: __Ownable_init() doesn't have to be called as the overriden owner() + // function no longer rely on the _owner state. Since __Ownable_init() only sets + // the initial _owner value, calling it would have no effect. + } - function __GlobalOwnable_init_unchained(address globalOwner_) internal onlyInitializing { - _globalOwner = GlobalOwner(globalOwner_); - } + function __GlobalOwnable_init_unchained( + address globalOwner_ + ) internal onlyInitializing { + _globalOwner = GlobalOwner(globalOwner_); + } - /** - * @notice Retrieves the address of GlobalOwner contract. - * @return The address of the GlobalOwner contract. - */ - function globalOwner() public view returns (address) { - return address(_globalOwner); - } + /** + * @notice Retrieves the address of GlobalOwner contract. + * @return The address of the GlobalOwner contract. + */ + function globalOwner() public view returns (address) { + return address(_globalOwner); + } - /** - * @notice Override of OwnableUpgradeable.owner() that retrieves the owner's address - * from the GlobalOwner contract instead. - * @return The address of the owner - */ - function owner() public view override returns (address) { - return _globalOwner.owner(); - } + /** + * @notice Override of OwnableUpgradeable.owner() that retrieves the owner's address + * from the GlobalOwner contract instead. + * @return The address of the owner + */ + function owner() public view override returns (address) { + return _globalOwner.owner(); + } - /** - * @notice Override of OwnableUpgradeable.transferOwnership() that always reverts. - * Ownership is managed by the GlobalOwner contract and must be modified there. - */ - function transferOwnership(address newOwner) public view override onlyOwner { - newOwner; // Silence unused variable compiler warning - revert("L8"); - } + /** + * @notice Override of OwnableUpgradeable.transferOwnership() that always reverts. + * Ownership is managed by the GlobalOwner contract and must be modified there. + */ + function transferOwnership( + address newOwner + ) public view override onlyOwner { + newOwner; // Silence unused variable compiler warning + revert("L8"); + } - /** - * @notice Override of OwnableUpgradeable.renounceOwnership() that always reverts. - * Ownership is managed by the GlobalOwner contract and must be modified there. - */ - function renounceOwnership() public view override onlyOwner { - revert("L65"); - } + /** + * @notice Override of OwnableUpgradeable.renounceOwnership() that always reverts. + * Ownership is managed by the GlobalOwner contract and must be modified there. + */ + function renounceOwnership() public view override onlyOwner { + revert("L65"); + } - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/abstracts/GlobalPausableUpgradeable.sol b/contracts/src/abstracts/GlobalPausableUpgradeable.sol index df22bdaa..ebe71203 100644 --- a/contracts/src/abstracts/GlobalPausableUpgradeable.sol +++ b/contracts/src/abstracts/GlobalPausableUpgradeable.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; -import {GlobalPause} from "../GlobalPause.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import { GlobalPause } from "../GlobalPause.sol"; /** * @title GlobalPausableUpgradeable @@ -21,49 +21,56 @@ import {GlobalPause} from "../GlobalPause.sol"; * @dev For further details, see "GlobalPausableUpgradeable" section of whitepaper. * @custom:security-contact security@ledgity.com */ -abstract contract GlobalPausableUpgradeable is Initializable, PausableUpgradeable { - /** - * @notice The GlobalPause contract the pause state will be inherited from. - * @dev This state is private so derived contracts cannot change its value. - */ - GlobalPause private _globalPause; +abstract contract GlobalPausableUpgradeable is + Initializable, + PausableUpgradeable +{ + /** + * @notice The GlobalPause contract the pause state will be inherited from. + * @dev This state is private so derived contracts cannot change its value. + */ + GlobalPause private _globalPause; - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalPause_ The address of the GlobalPause contract. - */ - function __GlobalPausable_init(address globalPause_) internal onlyInitializing { - __Pausable_init(); - __GlobalPausable_init_unchained(globalPause_); - } + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalPause_ The address of the GlobalPause contract. + */ + function __GlobalPausable_init( + address globalPause_ + ) internal onlyInitializing { + __Pausable_init(); + __GlobalPausable_init_unchained(globalPause_); + } - function __GlobalPausable_init_unchained(address globalPause_) internal onlyInitializing { - _globalPause = GlobalPause(globalPause_); - } + function __GlobalPausable_init_unchained( + address globalPause_ + ) internal onlyInitializing { + _globalPause = GlobalPause(globalPause_); + } - /** - * @notice Retrieves the address of GlobalPause contract. - * @return The address of the GlobalPause contract. - */ - function globalPause() public view returns (address) { - return address(_globalPause); - } + /** + * @notice Retrieves the address of GlobalPause contract. + * @return The address of the GlobalPause contract. + */ + function globalPause() public view returns (address) { + return address(_globalPause); + } - /** - * @notice Override of PausableUpgradeable.pause() that retrieves the pause state - * from the GlobalPause contract instead. - * @return Whether the contract is paused or not. - */ - function paused() public view virtual override returns (bool) { - return _globalPause.paused(); - } + /** + * @notice Override of PausableUpgradeable.pause() that retrieves the pause state + * from the GlobalPause contract instead. + * @return Whether the contract is paused or not. + */ + function paused() public view virtual override returns (bool) { + return _globalPause.paused(); + } - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol b/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol index 00938919..b07913d7 100644 --- a/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol +++ b/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {GlobalBlacklist} from "../GlobalBlacklist.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { GlobalBlacklist } from "../GlobalBlacklist.sol"; /** * @title GlobalRestrictableUpgradeable @@ -21,58 +21,62 @@ import {GlobalBlacklist} from "../GlobalBlacklist.sol"; * @custom:security-contact security@ledgity.com */ abstract contract GlobalRestrictableUpgradeable is Initializable { - /** - * @notice The GlobalBlacklist contract the blacklist state will be inherited from. - * @dev This state is private so derived contracts cannot change its value. - */ - GlobalBlacklist private _globalBlacklist; + /** + * @notice The GlobalBlacklist contract the blacklist state will be inherited from. + * @dev This state is private so derived contracts cannot change its value. + */ + GlobalBlacklist private _globalBlacklist; - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - */ - function __GlobalRestrictable_init(address globalBlacklist_) internal onlyInitializing { - __GlobalRestrictable_init_unchained(globalBlacklist_); - } + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + */ + function __GlobalRestrictable_init( + address globalBlacklist_ + ) internal onlyInitializing { + __GlobalRestrictable_init_unchained(globalBlacklist_); + } - function __GlobalRestrictable_init_unchained( - address globalBlacklist_ - ) internal onlyInitializing { - _globalBlacklist = GlobalBlacklist(globalBlacklist_); - } + function __GlobalRestrictable_init_unchained( + address globalBlacklist_ + ) internal onlyInitializing { + _globalBlacklist = GlobalBlacklist(globalBlacklist_); + } - /** - * @notice Retrieves the address of GlobalBlacklist contract. - * @return The address of the GlobalBlacklist contract. - */ - function globalBlacklist() public view returns (address) { - return address(_globalBlacklist); - } + /** + * @notice Retrieves the address of GlobalBlacklist contract. + * @return The address of the GlobalBlacklist contract. + */ + function globalBlacklist() public view returns (address) { + return address(_globalBlacklist); + } - /** - * @notice Reverts if the given account is blacklisted by the GlobalBlacklist contract. - * @param account Address to verify. - */ - modifier notBlacklisted(address account) { - require(isBlacklisted(account) == false, "L9"); - _; - } + /** + * @notice Reverts if the given account is blacklisted by the GlobalBlacklist contract. + * @param account Address to verify. + */ + modifier notBlacklisted(address account) { + require(isBlacklisted(account) == false, "L9"); + _; + } - /** - * @notice Checks if the given account is blacklisted by the GlobalBlacklist contract. - * @param account Address to verify. - * @return Whether the account is blacklisted. - */ - function isBlacklisted(address account) internal view returns (bool) { - return _globalBlacklist.isBlacklisted(account); - } + /** + * @notice Checks if the given account is blacklisted by the GlobalBlacklist contract. + * @param account Address to verify. + * @return Whether the account is blacklisted. + */ + function isBlacklisted( + address account + ) internal view returns (bool) { + return _globalBlacklist.isBlacklisted(account); + } - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/abstracts/InvestUpgradeable.sol b/contracts/src/abstracts/InvestUpgradeable.sol index d86ffe43..b6743b50 100644 --- a/contracts/src/abstracts/InvestUpgradeable.sol +++ b/contracts/src/abstracts/InvestUpgradeable.sol @@ -2,21 +2,21 @@ pragma solidity 0.8.18; // Contracts -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {GlobalOwnableUpgradeable} from "./GlobalOwnableUpgradeable.sol"; -import {GlobalPausableUpgradeable} from "./GlobalPausableUpgradeable.sol"; -import {GlobalRestrictableUpgradeable} from "./GlobalRestrictableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { GlobalOwnableUpgradeable } from "./GlobalOwnableUpgradeable.sol"; +import { GlobalPausableUpgradeable } from "./GlobalPausableUpgradeable.sol"; +import { GlobalRestrictableUpgradeable } from "./GlobalRestrictableUpgradeable.sol"; import "./base/BaseUpgradeable.sol"; -import {RecoverableUpgradeable} from "../abstracts/RecoverableUpgradeable.sol"; +import { RecoverableUpgradeable } from "../abstracts/RecoverableUpgradeable.sol"; // Libraries -import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; -import {APRHistory as APRH} from "../libs/APRHistory.sol"; -import {SUD} from "../libs/SUD.sol"; +import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import { APRHistory as APRH } from "../libs/APRHistory.sol"; +import { SUD } from "../libs/SUD.sol"; // Interfaces -import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; -import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; +import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import { IERC20MetadataUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; /** * @title InvestUpgradeable @@ -48,405 +48,450 @@ import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/tok * @custom:security-contact security@ledgity.com */ abstract contract InvestUpgradeable is BaseUpgradeable { - using SafeERC20Upgradeable for IERC20Upgradeable; - using APRH for APRH.Pack[]; - - /** - * @notice Represents an account's investment period. - * @param timestamp The timestamp of the most recent rewards distribution. - * @param ref The reference of the last APR checkpoint at that timestamp. - */ - struct InvestmentPeriod { - uint40 timestamp; // Supports dates up to 20/02/36812 - APRH.Reference ref; + using SafeERC20Upgradeable for IERC20Upgradeable; + using APRH for APRH.Pack[]; + + /** + * @notice Represents an account's investment period. + * @param timestamp The timestamp of the most recent rewards distribution. + * @param ref The reference of the last APR checkpoint at that timestamp. + */ + struct InvestmentPeriod { + uint40 timestamp; // Supports dates up to 20/02/36812 + APRH.Reference ref; + } + + /** + * @notice Represents the investment details of an account. + * @param period The current investment period of the account. + * @param virtualBalance May hold a part of account rewards until they are claimed. + */ + struct AccountDetails { + InvestmentPeriod period; + uint256 virtualBalance; + } + + /// @notice Holds a reference to the invested token's contract. + IERC20Upgradeable private _invested; + + /// @notice Holds investment details of each account. + mapping(address => AccountDetails) internal accountsDetails; + + /// @notice Holds an history of the APR value over time (see APRHistory.sol). + APRH.Pack[] private _aprHistory; + + /// @notice Holds active rewards redirections in both from->to and to->from[] ways. + mapping(address => address) public rewardsRedirectsFromTo; + mapping(address => address[]) public rewardsRedirectsToFrom; + + /// @notice Is used to prevent infinite loop in _beforeInvestmentChange(). + bool private _isClaiming; + + /** + * @notice Emitted to inform listeners about a change in the APR's value. + * @param newAPRUD7x3 The new APR in UD7x3 format. + */ + event APRChangeEvent(uint16 newAPRUD7x3); + + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + * @param globalPause_ The address of the GlobalPause contract. + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + * @param invested_ The address of the invested token contract. + */ + function __Invest_init( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + address invested_ + ) internal onlyInitializing { + __Base_init(globalOwner_, globalPause_, globalBlacklist_); + __Invest_init_unchained(invested_); + } + + function __Invest_init_unchained( + address invested_ + ) internal onlyInitializing { + // Set invested token + _invested = IERC20Upgradeable(invested_); + + // Define initial APR to 0%. This would prevent getAPR() from reverting because + // of an empty APR history + _aprHistory.setAPR(0); + } + + /** + * @notice Retrieves the reference to the invested token contract. + * @return The reference to the invested token contract. + */ + function invested() public view returns (IERC20Upgradeable) { + return _invested; + } + + /** + * @notice Updates the investment APR. Restricted to owner. + * @param aprUD7x3 The new APR in UD7x3 format. + */ + function setAPR(uint16 aprUD7x3) public onlyOwner { + _aprHistory.setAPR(aprUD7x3); + emit APRChangeEvent(aprUD7x3); + } + + /** + * @notice Retrieves the most recently set APR. + * @return The current APR in UD7x3 format. + */ + function getAPR() public view returns (uint16) { + return _aprHistory.getAPR(); + } + + /** + * @notice Enables redirection of rewards from one account to another. + * @param from The address of the account to redirect rewards from. + * @param to The address of the account to redirect rewards to. + */ + function startRewardsRedirection( + address from, + address to + ) public whenNotPaused notBlacklisted(from) notBlacklisted(to) { + // Ensure the address is not already redirecting rewards + require(rewardsRedirectsFromTo[from] == address(0), "L62"); + + // Ensure neither 'from' nor 'to' are the zero address + require(from != address(0), "L12"); + require(to != address(0), "L13"); + + // Ensure 'from' and 'to' addresses are distinct + require(from != to, "L14"); + + // Ensure function caller is either the owner or the 'from' address + require(_msgSender() == owner() || _msgSender() == from, "L15"); + + // Distribute current rewards and reset investment periods of both accounts + _beforeInvestmentChange(from, true); + _beforeInvestmentChange(to, true); + + // Activate rewards redirection + rewardsRedirectsFromTo[from] = to; + rewardsRedirectsToFrom[to].push(from); + } + + /** + * @notice Disable an active rewards redirection. + * @param from The address of the account to stop redirecting rewards from. + * @param to The address of the account to stop redirecting rewards to. + */ + function stopRewardsRedirection( + address from, + address to + ) public whenNotPaused notBlacklisted(from) notBlacklisted(to) { + // Ensure neither 'from' nor 'to' are the zero address + require(from != address(0), "L16"); + require(to != address(0), "L17"); + + // Ensure function caller is either the owner or the 'from' address + require(_msgSender() == owner() || _msgSender() == from, "L18"); + + // Ensure a rewards redirection was active + require(rewardsRedirectsFromTo[from] == to, "L19"); + + // Distribute current rewards and reset investment periods of both accounts + _beforeInvestmentChange(from, true); + _beforeInvestmentChange(to, true); + + // Retrieve 'from' index in the redirection array of 'to' + int256 fromIndex = -1; + for (uint256 i = 0; i < rewardsRedirectsToFrom[to].length; i++) { + if (rewardsRedirectsToFrom[to][i] == from) { + fromIndex = int256(i); + break; + } } - /** - * @notice Represents the investment details of an account. - * @param period The current investment period of the account. - * @param virtualBalance May hold a part of account rewards until they are claimed. - */ - struct AccountDetails { - InvestmentPeriod period; - uint256 virtualBalance; + // fromIndex should never be -1 at this point + assert(fromIndex >= 0); + + // Deactivate rewards redirection + rewardsRedirectsFromTo[from] = address(0); + rewardsRedirectsToFrom[to][ + uint256(fromIndex) + ] = rewardsRedirectsToFrom[to][ + rewardsRedirectsToFrom[to].length - 1 + ]; + rewardsRedirectsToFrom[to].pop(); + } + + /** + * @notice Retrieves the total amount of tokens invested by the given account. + * @dev Derived contracts must implement this function. + * @param account The account to get the investment of. + * @return The total amount of tokens invested by the given account. + */ + function _investmentOf( + address account + ) internal view virtual returns (uint256); + + /** + * @notice Distributes a specified amount of rewards to a given account. + * @dev Derived contracts may optionally implement this function. + * @dev Implementations must return true to indicate a successful distribution, and + * false otherwise. If it returns false, the rewards will be added to the account's + * virtual balance, in order to be claimed later. + * @param account The account to claim the rewards of. + * @param amount The amount of rewards to claim. + * @return Whether the rewards distribution was successfull. + */ + function _distributeRewards( + address account, + uint256 amount + ) internal virtual returns (bool) { + account; // Silence unused variables warning + amount; + return false; + } + + /** + * @notice Computes the rewards accrued over a specified period of time, based on a + * given APR and amount of invested tokens. + * @dev For further details, see "InvestUpgradeable > Rewards calculation" section of + * the whitepaper. + * @param beginTimestamp The moment the period commenced. + * @param endTimestamp The moment the period concluded. + * @param aprUD7x3 The APR during this period, in UD7x3 format. + * @param investedAmount The amount of tokens deposited/invested during the period. + * @return The amount of rewards generated during the period. + */ + function _calculatePeriodRewards( + uint40 beginTimestamp, + uint40 endTimestamp, + uint16 aprUD7x3, + uint256 investedAmount + ) internal view returns (uint256) { + // Cache invested token's decimals number + uint256 d = SUD.decimalsOf(address(invested())); + + // Compute the number of elapsed years + uint256 elapsedTimeSUD = SUD.fromInt( + endTimestamp - beginTimestamp, + d + ); + uint256 elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1, d)) / + SUD.fromInt(365 days, d); + + // Compute the growth in invested amount (thanks to rewards) + uint256 aprSUD = SUD.fromRate(aprUD7x3, d); + uint256 growthSUD = (elapsedYearsSUD * aprSUD) / + SUD.fromInt(1, d); + + // Compute and return the rewards + uint256 investedAmountSUD = SUD.fromAmount(investedAmount, d); + uint256 rewardsSUD = (investedAmountSUD * growthSUD) / + SUD.fromInt(100, d); + return SUD.toAmount(rewardsSUD, d); + } + + /** + * @notice Computes the sum of given account's invested amount, plus invested amount + * of all accounts that recursively redirect rewards to this account. + * @param account The account to calculate the deep investment of. + * @return deepInvestedAmount The deep invested amount. + */ + function _deepInvestmentOf( + address account + ) internal view returns (uint256 deepInvestedAmount) { + // Consider account's direct investment + deepInvestedAmount += _investmentOf(account); + + // But also the deep investments of all accounts redirecting rewards to this account + for ( + uint256 i = 0; + i < rewardsRedirectsToFrom[account].length; + i++ + ) { + deepInvestedAmount += _deepInvestmentOf( + rewardsRedirectsToFrom[account][i] + ); } - - /// @notice Holds a reference to the invested token's contract. - IERC20Upgradeable private _invested; - - /// @notice Holds investment details of each account. - mapping(address => AccountDetails) internal accountsDetails; - - /// @notice Holds an history of the APR value over time (see APRHistory.sol). - APRH.Pack[] private _aprHistory; - - /// @notice Holds active rewards redirections in both from->to and to->from[] ways. - mapping(address => address) public rewardsRedirectsFromTo; - mapping(address => address[]) public rewardsRedirectsToFrom; - - /// @notice Is used to prevent infinite loop in _beforeInvestmentChange(). - bool private _isClaiming; - - /** - * @notice Emitted to inform listeners about a change in the APR's value. - * @param newAPRUD7x3 The new APR in UD7x3 format. - */ - event APRChangeEvent(uint16 newAPRUD7x3); - - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - * @param globalPause_ The address of the GlobalPause contract. - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - * @param invested_ The address of the invested token contract. - */ - function __Invest_init( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - address invested_ - ) internal onlyInitializing { - __Base_init(globalOwner_, globalPause_, globalBlacklist_); - __Invest_init_unchained(invested_); - } - - function __Invest_init_unchained(address invested_) internal onlyInitializing { - // Set invested token - _invested = IERC20Upgradeable(invested_); - - // Define initial APR to 0%. This would prevent getAPR() from reverting because - // of an empty APR history - _aprHistory.setAPR(0); - } - - /** - * @notice Retrieves the reference to the invested token contract. - * @return The reference to the invested token contract. - */ - function invested() public view returns (IERC20Upgradeable) { - return _invested; + } + + /** + * @notice Computes the amount of unclaimed/undistributed rewards of a given account. + * @dev For further details, see "InvestUpgradeable > Rewards calculation" section of + * the whitepaper. + * @param account The account to calculate the unclaimed rewards of. + * @param autocompound Whether to autocompound the rewards between APR checkpoints. + * @return rewards The amount of unclaimed/undistributed rewards of the given account. + */ + function _rewardsOf( + address account, + bool autocompound + ) internal view returns (uint256 rewards) { + // Retrieve account's investment details + AccountDetails memory details = accountsDetails[account]; + + // Retrieve account's deep invested amount + uint256 investedAmount = _deepInvestmentOf(account); + + // Return 0 if the account has never invested or has no invested amount + if (details.period.timestamp == 0 || investedAmount == 0) + return 0; + + // Retrieve reference and data of APR checkpoint at which started investment period + APRH.Reference memory currRef = details.period.ref; + APRH.CheckpointData memory currCheckpoint = _aprHistory + .getDataFromReference(currRef); + + // Retrieve reference of latest APR checkpoint + APRH.Reference memory latestRef = _aprHistory + .getLatestReference(); + + // 1) Fill rewards with virtual balance (rewards not claimed/distributed yet) + // See "InvestUpgradeable > Yield calculation > 1)" section of the whitepaper + rewards = details.virtualBalance; + + // If start checkpoint is not the latest one + if (!APRH.eq(currRef, latestRef)) { + // Retrieve reference and data of APR checkpoint that comes after start checkpoint + APRH.Reference memory nextRef = APRH.incrementReference( + currRef + ); + APRH.CheckpointData memory nextCheckpoint = _aprHistory + .getDataFromReference(nextRef); + + // 2) Calculate rewards from investment period start to next checkpoint + // See "InvestUpgradeable > Yield calculation > 2)" section of the whitepaper + rewards += _calculatePeriodRewards( + details.period.timestamp, + nextCheckpoint.timestamp, + currCheckpoint.aprUD7x3, + investedAmount + (autocompound ? rewards : 0) + ); + + // 3) Calculate rewards for each crossed pair of checkpoints + // See "InvestUpgradeable > Yield calculation > 3)" section of the whitepaper + while (true) { + // Set next checkpoint as the current one + currRef = nextRef; + currCheckpoint = nextCheckpoint; + + // Break if current checkpoint is the latest one + if (APRH.eq(currRef, latestRef)) break; + + // Else, retrieve the new next checkpoint + nextRef = APRH.incrementReference(currRef); + nextCheckpoint = _aprHistory.getDataFromReference(nextRef); + + // Calculate rewards between the current pair of checkpoints + rewards += _calculatePeriodRewards( + currCheckpoint.timestamp, + nextCheckpoint.timestamp, + currCheckpoint.aprUD7x3, + investedAmount + (autocompound ? rewards : 0) + ); + } + + // 4) Calculate rewards from the latest checkpoint to now + // See "InvestUpgradeable > Yield calculation > 4)" section of the whitepaper + rewards += _calculatePeriodRewards( + currCheckpoint.timestamp, + uint40(block.timestamp), + currCheckpoint.aprUD7x3, + investedAmount + (autocompound ? rewards : 0) + ); + } else { + // 2.bis) Calculate rewards from investment period start to now + // See "InvestUpgradeable > Yield calculation > 2.bis)" section of the whitepaper + rewards += _calculatePeriodRewards( + details.period.timestamp, + uint40(block.timestamp), + currCheckpoint.aprUD7x3, + investedAmount + (autocompound ? rewards : 0) + ); } - - /** - * @notice Updates the investment APR. Restricted to owner. - * @param aprUD7x3 The new APR in UD7x3 format. - */ - function setAPR(uint16 aprUD7x3) public onlyOwner { - _aprHistory.setAPR(aprUD7x3); - emit APRChangeEvent(aprUD7x3); + } + + /** + * @notice Recursively resets the investment period of the specified account and of + * all accounts that directly or indirectly redirect rewards to this account. + * @param account The account to deeply reset the investment period of. + */ + function _deepResetInvestmentPeriodOf(address account) internal { + // Reset account investment period timestamp and APR checkpoint to latest ones + accountsDetails[account].period.timestamp = uint40( + block.timestamp + ); + accountsDetails[account].period.ref = _aprHistory + .getLatestReference(); + + // Also reset the ones of all accounts that recursively redirect rewards to this account + for ( + uint256 i = 0; + i < rewardsRedirectsToFrom[account].length; + i++ + ) { + _deepResetInvestmentPeriodOf( + rewardsRedirectsToFrom[account][i] + ); } - - /** - * @notice Retrieves the most recently set APR. - * @return The current APR in UD7x3 format. - */ - function getAPR() public view returns (uint16) { - return _aprHistory.getAPR(); + } + + /** + * @notice Hook to be invoked before the invested amount of an account changes. It + * ensures that rewards are distributed and that account's investment period is reset. + * @param account The account whose invested amount is going to change. + * @param autocompound Whether to autocompound the rewards between APR checkpoints. + */ + function _beforeInvestmentChange( + address account, + bool autocompound + ) internal { + // This hook is called inside LToken._beforeTokenTransfer() and as new tokens are + // minted in LToken._distributeRewards(), this guards against infinite loop. + if (_isClaiming) return; + + // LToken._beforeTokenTransfer() calls this hook for both involved addresses. + // As first call will treat both addresses, the second call would be redundant. + // Therefore, we skip accounts already processed in this block to save up some gas. + if ( + accountsDetails[account].period.timestamp == + uint40(block.timestamp) + ) return; + + // If account redirects its rewards + address redirectRewardsTo = rewardsRedirectsFromTo[account]; + if (redirectRewardsTo != address(0)) { + // Call hook on redirection target (this will indirectly reset the investment + // of this source account) and return + _beforeInvestmentChange(redirectRewardsTo, autocompound); + return; } - /** - * @notice Enables redirection of rewards from one account to another. - * @param from The address of the account to redirect rewards from. - * @param to The address of the account to redirect rewards to. - */ - function startRewardsRedirection( - address from, - address to - ) public whenNotPaused notBlacklisted(from) notBlacklisted(to) { - // Ensure the address is not already redirecting rewards - require(rewardsRedirectsFromTo[from] == address(0), "L62"); - - // Ensure neither 'from' nor 'to' are the zero address - require(from != address(0), "L12"); - require(to != address(0), "L13"); - - // Ensure 'from' and 'to' addresses are distinct - require(from != to, "L14"); - - // Ensure function caller is either the owner or the 'from' address - require(_msgSender() == owner() || _msgSender() == from, "L15"); - - // Distribute current rewards and reset investment periods of both accounts - _beforeInvestmentChange(from, true); - _beforeInvestmentChange(to, true); - - // Activate rewards redirection - rewardsRedirectsFromTo[from] = to; - rewardsRedirectsToFrom[to].push(from); - } + // Else, compute account's undistributed/unclaimed rewards + uint256 rewards = _rewardsOf(account, autocompound); - /** - * @notice Disable an active rewards redirection. - * @param from The address of the account to stop redirecting rewards from. - * @param to The address of the account to stop redirecting rewards to. - */ - function stopRewardsRedirection( - address from, - address to - ) public whenNotPaused notBlacklisted(from) notBlacklisted(to) { - // Ensure neither 'from' nor 'to' are the zero address - require(from != address(0), "L16"); - require(to != address(0), "L17"); - - // Ensure function caller is either the owner or the 'from' address - require(_msgSender() == owner() || _msgSender() == from, "L18"); - - // Ensure a rewards redirection was active - require(rewardsRedirectsFromTo[from] == to, "L19"); - - // Distribute current rewards and reset investment periods of both accounts - _beforeInvestmentChange(from, true); - _beforeInvestmentChange(to, true); - - // Retrieve 'from' index in the redirection array of 'to' - int256 fromIndex = -1; - for (uint256 i = 0; i < rewardsRedirectsToFrom[to].length; i++) { - if (rewardsRedirectsToFrom[to][i] == from) { - fromIndex = int256(i); - break; - } - } - - // fromIndex should never be -1 at this point - assert(fromIndex >= 0); - - // Deactivate rewards redirection - rewardsRedirectsFromTo[from] = address(0); - rewardsRedirectsToFrom[to][uint256(fromIndex)] = rewardsRedirectsToFrom[to][ - rewardsRedirectsToFrom[to].length - 1 - ]; - rewardsRedirectsToFrom[to].pop(); - } + // If there are some rewards + if (rewards > 0) { + // Try to distribute rewards to account + _isClaiming = true; + bool distributed = _distributeRewards(account, rewards); + _isClaiming = false; - /** - * @notice Retrieves the total amount of tokens invested by the given account. - * @dev Derived contracts must implement this function. - * @param account The account to get the investment of. - * @return The total amount of tokens invested by the given account. - */ - function _investmentOf(address account) internal view virtual returns (uint256); - - /** - * @notice Distributes a specified amount of rewards to a given account. - * @dev Derived contracts may optionally implement this function. - * @dev Implementations must return true to indicate a successful distribution, and - * false otherwise. If it returns false, the rewards will be added to the account's - * virtual balance, in order to be claimed later. - * @param account The account to claim the rewards of. - * @param amount The amount of rewards to claim. - * @return Whether the rewards distribution was successfull. - */ - function _distributeRewards(address account, uint256 amount) internal virtual returns (bool) { - account; // Silence unused variables warning - amount; - return false; + // If rewards have not been distributed, accumulate them in account's virtual balance + if (!distributed) + accountsDetails[account].virtualBalance = rewards; } - /** - * @notice Computes the rewards accrued over a specified period of time, based on a - * given APR and amount of invested tokens. - * @dev For further details, see "InvestUpgradeable > Rewards calculation" section of - * the whitepaper. - * @param beginTimestamp The moment the period commenced. - * @param endTimestamp The moment the period concluded. - * @param aprUD7x3 The APR during this period, in UD7x3 format. - * @param investedAmount The amount of tokens deposited/invested during the period. - * @return The amount of rewards generated during the period. - */ - function _calculatePeriodRewards( - uint40 beginTimestamp, - uint40 endTimestamp, - uint16 aprUD7x3, - uint256 investedAmount - ) internal view returns (uint256) { - // Cache invested token's decimals number - uint256 d = SUD.decimalsOf(address(invested())); - - // Compute the number of elapsed years - uint256 elapsedTimeSUD = SUD.fromInt(endTimestamp - beginTimestamp, d); - uint256 elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1, d)) / SUD.fromInt(365 days, d); - - // Compute the growth in invested amount (thanks to rewards) - uint256 aprSUD = SUD.fromRate(aprUD7x3, d); - uint256 growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1, d); - - // Compute and return the rewards - uint256 investedAmountSUD = SUD.fromAmount(investedAmount, d); - uint256 rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100, d); - return SUD.toAmount(rewardsSUD, d); - } - - /** - * @notice Computes the sum of given account's invested amount, plus invested amount - * of all accounts that recursively redirect rewards to this account. - * @param account The account to calculate the deep investment of. - * @return deepInvestedAmount The deep invested amount. - */ - function _deepInvestmentOf(address account) internal view returns (uint256 deepInvestedAmount) { - // Consider account's direct investment - deepInvestedAmount += _investmentOf(account); - - // But also the deep investments of all accounts redirecting rewards to this account - for (uint256 i = 0; i < rewardsRedirectsToFrom[account].length; i++) { - deepInvestedAmount += _deepInvestmentOf(rewardsRedirectsToFrom[account][i]); - } - } - - /** - * @notice Computes the amount of unclaimed/undistributed rewards of a given account. - * @dev For further details, see "InvestUpgradeable > Rewards calculation" section of - * the whitepaper. - * @param account The account to calculate the unclaimed rewards of. - * @param autocompound Whether to autocompound the rewards between APR checkpoints. - * @return rewards The amount of unclaimed/undistributed rewards of the given account. - */ - function _rewardsOf( - address account, - bool autocompound - ) internal view returns (uint256 rewards) { - // Retrieve account's investment details - AccountDetails memory details = accountsDetails[account]; - - // Retrieve account's deep invested amount - uint256 investedAmount = _deepInvestmentOf(account); - - // Return 0 if the account has never invested or has no invested amount - if (details.period.timestamp == 0 || investedAmount == 0) return 0; - - // Retrieve reference and data of APR checkpoint at which started investment period - APRH.Reference memory currRef = details.period.ref; - APRH.CheckpointData memory currCheckpoint = _aprHistory.getDataFromReference(currRef); - - // Retrieve reference of latest APR checkpoint - APRH.Reference memory latestRef = _aprHistory.getLatestReference(); - - // 1) Fill rewards with virtual balance (rewards not claimed/distributed yet) - // See "InvestUpgradeable > Yield calculation > 1)" section of the whitepaper - rewards = details.virtualBalance; - - // If start checkpoint is not the latest one - if (!APRH.eq(currRef, latestRef)) { - // Retrieve reference and data of APR checkpoint that comes after start checkpoint - APRH.Reference memory nextRef = APRH.incrementReference(currRef); - APRH.CheckpointData memory nextCheckpoint = _aprHistory.getDataFromReference(nextRef); - - // 2) Calculate rewards from investment period start to next checkpoint - // See "InvestUpgradeable > Yield calculation > 2)" section of the whitepaper - rewards += _calculatePeriodRewards( - details.period.timestamp, - nextCheckpoint.timestamp, - currCheckpoint.aprUD7x3, - investedAmount + (autocompound ? rewards : 0) - ); - - // 3) Calculate rewards for each crossed pair of checkpoints - // See "InvestUpgradeable > Yield calculation > 3)" section of the whitepaper - while (true) { - // Set next checkpoint as the current one - currRef = nextRef; - currCheckpoint = nextCheckpoint; - - // Break if current checkpoint is the latest one - if (APRH.eq(currRef, latestRef)) break; - - // Else, retrieve the new next checkpoint - nextRef = APRH.incrementReference(currRef); - nextCheckpoint = _aprHistory.getDataFromReference(nextRef); - - // Calculate rewards between the current pair of checkpoints - rewards += _calculatePeriodRewards( - currCheckpoint.timestamp, - nextCheckpoint.timestamp, - currCheckpoint.aprUD7x3, - investedAmount + (autocompound ? rewards : 0) - ); - } - - // 4) Calculate rewards from the latest checkpoint to now - // See "InvestUpgradeable > Yield calculation > 4)" section of the whitepaper - rewards += _calculatePeriodRewards( - currCheckpoint.timestamp, - uint40(block.timestamp), - currCheckpoint.aprUD7x3, - investedAmount + (autocompound ? rewards : 0) - ); - } else { - // 2.bis) Calculate rewards from investment period start to now - // See "InvestUpgradeable > Yield calculation > 2.bis)" section of the whitepaper - rewards += _calculatePeriodRewards( - details.period.timestamp, - uint40(block.timestamp), - currCheckpoint.aprUD7x3, - investedAmount + (autocompound ? rewards : 0) - ); - } - } - - /** - * @notice Recursively resets the investment period of the specified account and of - * all accounts that directly or indirectly redirect rewards to this account. - * @param account The account to deeply reset the investment period of. - */ - function _deepResetInvestmentPeriodOf(address account) internal { - // Reset account investment period timestamp and APR checkpoint to latest ones - accountsDetails[account].period.timestamp = uint40(block.timestamp); - accountsDetails[account].period.ref = _aprHistory.getLatestReference(); - - // Also reset the ones of all accounts that recursively redirect rewards to this account - for (uint256 i = 0; i < rewardsRedirectsToFrom[account].length; i++) { - _deepResetInvestmentPeriodOf(rewardsRedirectsToFrom[account][i]); - } - } - - /** - * @notice Hook to be invoked before the invested amount of an account changes. It - * ensures that rewards are distributed and that account's investment period is reset. - * @param account The account whose invested amount is going to change. - * @param autocompound Whether to autocompound the rewards between APR checkpoints. - */ - function _beforeInvestmentChange(address account, bool autocompound) internal { - // This hook is called inside LToken._beforeTokenTransfer() and as new tokens are - // minted in LToken._distributeRewards(), this guards against infinite loop. - if (_isClaiming) return; - - // LToken._beforeTokenTransfer() calls this hook for both involved addresses. - // As first call will treat both addresses, the second call would be redundant. - // Therefore, we skip accounts already processed in this block to save up some gas. - if (accountsDetails[account].period.timestamp == uint40(block.timestamp)) return; - - // If account redirects its rewards - address redirectRewardsTo = rewardsRedirectsFromTo[account]; - if (redirectRewardsTo != address(0)) { - // Call hook on redirection target (this will indirectly reset the investment - // of this source account) and return - _beforeInvestmentChange(redirectRewardsTo, autocompound); - return; - } - - // Else, compute account's undistributed/unclaimed rewards - uint256 rewards = _rewardsOf(account, autocompound); - - // If there are some rewards - if (rewards > 0) { - // Try to distribute rewards to account - _isClaiming = true; - bool distributed = _distributeRewards(account, rewards); - _isClaiming = false; - - // If rewards have not been distributed, accumulate them in account's virtual balance - if (!distributed) accountsDetails[account].virtualBalance = rewards; - } - - // Finally, deeply reset investment period of the account - _deepResetInvestmentPeriodOf(account); - } + // Finally, deeply reset investment period of the account + _deepResetInvestmentPeriodOf(account); + } - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/abstracts/RecoverableUpgradeable.sol b/contracts/src/abstracts/RecoverableUpgradeable.sol index 5424cde8..2636c9d3 100644 --- a/contracts/src/abstracts/RecoverableUpgradeable.sol +++ b/contracts/src/abstracts/RecoverableUpgradeable.sol @@ -2,14 +2,14 @@ pragma solidity 0.8.18; // Conracts -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {GlobalOwnableUpgradeable} from "./GlobalOwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { GlobalOwnableUpgradeable } from "./GlobalOwnableUpgradeable.sol"; // Libraries -import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; // Interfaces -import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; /** * @title RecoverableUpgradeable @@ -27,46 +27,54 @@ import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20 * @dev For further details, see "RecoverableUpgradeable" section of whitepaper. * @custom:security-contact security@ledgity.com */ -abstract contract RecoverableUpgradeable is Initializable, GlobalOwnableUpgradeable { - using SafeERC20Upgradeable for IERC20Upgradeable; +abstract contract RecoverableUpgradeable is + Initializable, + GlobalOwnableUpgradeable +{ + using SafeERC20Upgradeable for IERC20Upgradeable; - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - */ - function __Recoverable_init(address globalOwner_) internal onlyInitializing { - __GlobalOwnable_init(globalOwner_); - __Recoverable_init_unchained(); - } + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + */ + function __Recoverable_init( + address globalOwner_ + ) internal onlyInitializing { + __GlobalOwnable_init(globalOwner_); + __Recoverable_init_unchained(); + } - function __Recoverable_init_unchained() internal onlyInitializing {} + function __Recoverable_init_unchained() internal onlyInitializing {} - /** - * @notice Recovers a specified amount of a given token address. Will fail if the - * contract doesn't hold enough tokens. - * @param tokenAddress The address of the token to recover. - * @param amount The amount of token to recover. - */ - function recoverERC20(address tokenAddress, uint256 amount) public virtual onlyOwner { - // Ensure the specified amount is not zero - require(amount > 0, "L10"); + /** + * @notice Recovers a specified amount of a given token address. Will fail if the + * contract doesn't hold enough tokens. + * @param tokenAddress The address of the token to recover. + * @param amount The amount of token to recover. + */ + function recoverERC20( + address tokenAddress, + uint256 amount + ) public virtual onlyOwner { + // Ensure the specified amount is not zero + require(amount > 0, "L10"); - // Create a reference to token's contract - IERC20Upgradeable tokenContract = IERC20Upgradeable(tokenAddress); + // Create a reference to token's contract + IERC20Upgradeable tokenContract = IERC20Upgradeable(tokenAddress); - // Ensure there is enough token to recover - require(tokenContract.balanceOf(address(this)) >= amount, "L11"); + // Ensure there is enough token to recover + require(tokenContract.balanceOf(address(this)) >= amount, "L11"); - // Transfer the recovered token amount to the sender - tokenContract.safeTransfer(_msgSender(), amount); - } + // Transfer the recovered token amount to the sender + tokenContract.safeTransfer(_msgSender(), amount); + } - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/abstracts/base/BaseUpgradeable.sol b/contracts/src/abstracts/base/BaseUpgradeable.sol index 1432b412..4aee1815 100644 --- a/contracts/src/abstracts/base/BaseUpgradeable.sol +++ b/contracts/src/abstracts/base/BaseUpgradeable.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; -import {GlobalPausableUpgradeable} from "../GlobalPausableUpgradeable.sol"; -import {GlobalOwnableUpgradeable} from "../GlobalOwnableUpgradeable.sol"; -import {GlobalRestrictableUpgradeable} from "../GlobalRestrictableUpgradeable.sol"; -import {RecoverableUpgradeable} from "../RecoverableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { GlobalPausableUpgradeable } from "../GlobalPausableUpgradeable.sol"; +import { GlobalOwnableUpgradeable } from "../GlobalOwnableUpgradeable.sol"; +import { GlobalRestrictableUpgradeable } from "../GlobalRestrictableUpgradeable.sol"; +import { RecoverableUpgradeable } from "../RecoverableUpgradeable.sol"; /** * @title BaseUpgradeable @@ -20,57 +20,59 @@ import {RecoverableUpgradeable} from "../RecoverableUpgradeable.sol"; * @custom:security-contact security@ledgity.com */ abstract contract BaseUpgradeable is - Initializable, - UUPSUpgradeable, - GlobalOwnableUpgradeable, - GlobalPausableUpgradeable, - GlobalRestrictableUpgradeable, - RecoverableUpgradeable + Initializable, + UUPSUpgradeable, + GlobalOwnableUpgradeable, + GlobalPausableUpgradeable, + GlobalRestrictableUpgradeable, + RecoverableUpgradeable { - /** - * @notice Prevents implementation contract from being initialized as recommended by - * OpenZeppelin. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- - * @custom:oz-upgrades-unsafe-allow constructor - */ - constructor() { - _disableInitializers(); - } + /** + * @notice Prevents implementation contract from being initialized as recommended by + * OpenZeppelin. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable-_disableInitializers-- + * @custom:oz-upgrades-unsafe-allow constructor + */ + constructor() { + _disableInitializers(); + } - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - * @param globalPause_ The address of the GlobalPause contract. - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - */ - function __Base_init( - address globalOwner_, - address globalPause_, - address globalBlacklist_ - ) internal onlyInitializing { - __UUPSUpgradeable_init(); - __GlobalOwnable_init(globalOwner_); - __Pausable_init(); - __GlobalPausable_init_unchained(globalPause_); - __GlobalRestrictable_init_unchained(globalBlacklist_); - __Recoverable_init_unchained(); - } + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + * @param globalPause_ The address of the GlobalPause contract. + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + */ + function __Base_init( + address globalOwner_, + address globalPause_, + address globalBlacklist_ + ) internal onlyInitializing { + __UUPSUpgradeable_init(); + __GlobalOwnable_init(globalOwner_); + __Pausable_init(); + __GlobalPausable_init_unchained(globalPause_); + __GlobalRestrictable_init_unchained(globalBlacklist_); + __Recoverable_init_unchained(); + } - function __Base_init_unchained() internal onlyInitializing {} + function __Base_init_unchained() internal onlyInitializing {} - /** - * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to - * global owner. It is called by the proxy contract during an upgrade. - * @param newImplementation The address of the new implementation contract. - */ - function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + /** + * @notice Override of UUPSUpgradeable._authorizeUpgrade() function restricted to + * global owner. It is called by the proxy contract during an upgrade. + * @param newImplementation The address of the new implementation contract. + */ + function _authorizeUpgrade( + address newImplementation + ) internal override onlyOwner {} - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol b/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol index 265b5484..54563810 100644 --- a/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol +++ b/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; -import {ERC20PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PausableUpgradeable.sol"; -import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import { ERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import { ERC20PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PausableUpgradeable.sol"; +import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import "./BaseUpgradeable.sol"; -import {GlobalPausableUpgradeable} from "../GlobalPausableUpgradeable.sol"; +import { GlobalPausableUpgradeable } from "../GlobalPausableUpgradeable.sol"; /** * @title ERC20BaseUpgradeable @@ -19,77 +19,77 @@ import {GlobalPausableUpgradeable} from "../GlobalPausableUpgradeable.sol"; * @custom:security-contact security@ledgity.com */ abstract contract ERC20BaseUpgradeable is - ERC20Upgradeable, - BaseUpgradeable, - ERC20PausableUpgradeable + ERC20Upgradeable, + BaseUpgradeable, + ERC20PausableUpgradeable { - /** - * @notice Initializer functions of the contract. They replace the constructor() - * function in the context of upgradeable contracts. - * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable - * @param globalOwner_ The address of the GlobalOwner contract. - * @param globalPause_ The address of the GlobalPause contract. - * @param globalBlacklist_ The address of the GlobalBlacklist contract. - * @param name_ The display name of the token. - * @param symbol_ The symbol of the token. - */ - function __ERC20Base_init( - address globalOwner_, - address globalPause_, - address globalBlacklist_, - string memory name_, - string memory symbol_ - ) internal onlyInitializing { - __Base_init(globalOwner_, globalPause_, globalBlacklist_); - __ERC20_init(name_, symbol_); - __ERC20Pausable_init_unchained(); - } + /** + * @notice Initializer functions of the contract. They replace the constructor() + * function in the context of upgradeable contracts. + * @dev See: https://docs.openzeppelin.com/contracts/4.x/upgradeable + * @param globalOwner_ The address of the GlobalOwner contract. + * @param globalPause_ The address of the GlobalPause contract. + * @param globalBlacklist_ The address of the GlobalBlacklist contract. + * @param name_ The display name of the token. + * @param symbol_ The symbol of the token. + */ + function __ERC20Base_init( + address globalOwner_, + address globalPause_, + address globalBlacklist_, + string memory name_, + string memory symbol_ + ) internal onlyInitializing { + __Base_init(globalOwner_, globalPause_, globalBlacklist_); + __ERC20_init(name_, symbol_); + __ERC20Pausable_init_unchained(); + } - function __ERC20Base_init_unchained() internal onlyInitializing {} + function __ERC20Base_init_unchained() internal onlyInitializing {} - /** - * @notice Required override of paused() which is implemented by both - * GlobalPausableUpgradeable and PausableUpgradeable parent contracts. - * The GlobalPausableUpgradeable version is preferred because it checks the pause - * state from the GlobalPause contract. - * @inheritdoc GlobalPausableUpgradeable - */ - function paused() - public - view - virtual - override(GlobalPausableUpgradeable, PausableUpgradeable) - returns (bool) - { - return GlobalPausableUpgradeable.paused(); - } + /** + * @notice Required override of paused() which is implemented by both + * GlobalPausableUpgradeable and PausableUpgradeable parent contracts. + * The GlobalPausableUpgradeable version is preferred because it checks the pause + * state from the GlobalPause contract. + * @inheritdoc GlobalPausableUpgradeable + */ + function paused() + public + view + virtual + override(GlobalPausableUpgradeable, PausableUpgradeable) + returns (bool) + { + return GlobalPausableUpgradeable.paused(); + } - /** - * @dev Required override of _beforeTokenTransfer() which is implemented by both - * ERC20PausableUpgradeable and ERC20Upgradeable parent contracts. - * The ERC20PausableUpgradeable version is preferred because it also checks that - * the contract is not paused before allowing the transfer. - * @inheritdoc ERC20PausableUpgradeable - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 amount - ) - internal - virtual - override(ERC20PausableUpgradeable, ERC20Upgradeable) - whenNotPaused - notBlacklisted(from) - notBlacklisted(to) - { - ERC20PausableUpgradeable._beforeTokenTransfer(from, to, amount); - } + /** + * @dev Required override of _beforeTokenTransfer() which is implemented by both + * ERC20PausableUpgradeable and ERC20Upgradeable parent contracts. + * The ERC20PausableUpgradeable version is preferred because it also checks that + * the contract is not paused before allowing the transfer. + * @inheritdoc ERC20PausableUpgradeable + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount + ) + internal + virtual + override(ERC20PausableUpgradeable, ERC20Upgradeable) + whenNotPaused + notBlacklisted(from) + notBlacklisted(to) + { + ERC20PausableUpgradeable._beforeTokenTransfer(from, to, amount); + } - /** - * @dev This empty reserved space is put in place to allow future versions to add - * new variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ - uint256[50] private __gap; + /** + * @dev This empty reserved space is put in place to allow future versions to add + * new variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/contracts/src/interfaces/ITransfersListener.sol b/contracts/src/interfaces/ITransfersListener.sol index 86531a3a..58f96a83 100644 --- a/contracts/src/interfaces/ITransfersListener.sol +++ b/contracts/src/interfaces/ITransfersListener.sol @@ -2,5 +2,9 @@ pragma solidity 0.8.18; interface ITransfersListener { - function onLTokenTransfer(address from, address to, uint256 amount) external; + function onLTokenTransfer( + address from, + address to, + uint256 amount + ) external; } diff --git a/contracts/src/libs/APRHistory.sol b/contracts/src/libs/APRHistory.sol index 8815f7ab..54620449 100644 --- a/contracts/src/libs/APRHistory.sol +++ b/contracts/src/libs/APRHistory.sol @@ -37,177 +37,189 @@ pragma solidity 0.8.18; * @custom:security-contact security@ledgity.com */ library APRHistory { - /** - * @notice Represents data of a checkpoint extracted from the on-chain history. - * For on-chain representation see "Pack" struct. - * @param aprUD7x3 APR in UD7x3 format (e.g., 12345 = 12.345%). - * @param timestamp Timestamp of the checkpoint's creation. - */ - struct CheckpointData { - uint16 aprUD7x3; // Allows up to 65.536% - uint40 timestamp; // Supports dates up to 20/02/36812 - } - - /** - * @notice Represents how APR checkpoints are stored on chain. Each pack can contain - * the data 4 checkpoints. Packs are then stored in a dynamic array (the history). - * @param aprsUD7x3 Array of checkpoints' APRs. - * @param timestamps Array of checkpoints' timestamps. - * @param cursor Index of the next checkpoint to be written. - */ - struct Pack { - uint16[4] aprsUD7x3; - uint40[4] timestamps; - uint32 cursor; - } - - /** - * @notice Represents a storage pointer to a specific checkpoint in the history. - * @param packIndex Index of the pack the checkpoint belongs to. - * @param cursorIndex Index of the checkpoint in this pack (between 0 and 3). - */ - struct Reference { - uint256 packIndex; - uint32 cursorIndex; - } - - /** - * @notice Compares two checkpoints references. - * @param ref1 The first reference to compare. - * @param ref2 The second reference to compare. - * @return Whether the two references points to the same checkpoint. - */ - function eq(Reference memory ref1, Reference memory ref2) external pure returns (bool) { - return ref1.packIndex == ref2.packIndex && ref1.cursorIndex == ref2.cursorIndex; - } - - /** - * @notice Returns the reference of the checkpoint that should come right after the - * referenced checkpoint in the APR history. - * @param ref The reference to be incremented. - * @return The incremented reference. - */ - function incrementReference(Reference memory ref) public pure returns (Reference memory) { - // Ensure cursor index of the given ref is within valid range [0, 3] - require(ref.cursorIndex <= 3, "L1"); - - // If the given ref is the last slot in its pack, return ref of next pack's first slot - if (ref.cursorIndex == 3) return Reference(ref.packIndex + 1, 0); - // - // Else, return ref of next slot in current pack - else return Reference(ref.packIndex, ref.cursorIndex + 1); - } - - /** - * @notice Extracts checkpoint data from a given reference and in APR history. - * @param self The APR history to extract the checkpoint from. - * @param ref The reference of the checkpoint data to extract. - * @return The extracted checkpoint's data. - */ - function getDataFromReference( - Pack[] storage self, - Reference memory ref - ) public view returns (CheckpointData memory) { - // Ensure cursor index of the given ref is within valid range [0, 3] - require(ref.cursorIndex <= 3, "L2"); - - // Ensure pack index of the given ref exists in history - require(ref.packIndex < self.length, "L3"); - - // Retrieve pack data from history - Pack memory pack = self[ref.packIndex]; - - // Ensure cursor index of the given ref has been written - require(ref.cursorIndex < pack.cursor, "L4"); - - // Build and return the checkpoint data - return - CheckpointData({ - aprUD7x3: pack.aprsUD7x3[ref.cursorIndex], - timestamp: pack.timestamps[ref.cursorIndex] - }); - } - - /** - * @notice Retrieves the reference to the most recently added checkpoint in the APR history. - * @param self The history to extract the reference from. - * @return The reference of the latest checkpoint. - */ - function getLatestReference(Pack[] storage self) public view returns (Reference memory) { - // Ensure the given history is not empty - require(self.length != 0, "L5"); - - // Retrieve latest pack's index and cursor - uint256 packIndex = self.length - 1; - uint32 packCursor = self[packIndex].cursor; - - // If this is the first pack ever, ensure it is not empty - if (packIndex == 0) require(packCursor != 0, "L6"); - - // If the pack is empty, return ref of previous pack's latest slot - if (packCursor == 0) return Reference(packIndex - 1, 3); - // - // Else, return ref of previous slot in current pack - else return Reference(packIndex, packCursor - 1); - } - - /** - * @notice Appends a new empty pack to the end of the given APR history array. - * @param self The APR history to append an empty to. - */ - function newBlankPack(Pack[] storage self) internal { - // If history is not empty, ensure the latest pack is full - require(self.length == 0 || getLatestReference(self).cursorIndex == 3, "L7"); - - // Push a new blank pack to the history array - self.push( - Pack({ - aprsUD7x3: [uint16(0), uint16(0), uint16(0), uint16(0)], - timestamps: [uint40(0), uint40(0), uint40(0), uint40(0)], - cursor: 0 - }) - ); - } - - /** - * @notice Write a new APR checkpoint at the end of the given history array. - * @param self The array of packs to write the new checkpoint to. - * @param aprUD7x3 The new APR in UD7x3 format. - */ - function setAPR(Pack[] storage self, uint16 aprUD7x3) external { - // Determine the reference where the new checkpoint should be written - Reference memory newRef = self.length == 0 - ? Reference(0, 0) - : incrementReference(getLatestReference(self)); - - // If pack to be written doesn't exist yet, push a new blank pack in history - if (newRef.packIndex >= self.length) newBlankPack(self); - - // Retrieve the pack where the new checkpoint will be stored - Pack memory pack = self[newRef.packIndex]; - - // Add new checkpoint's data to the pack - pack.aprsUD7x3[newRef.cursorIndex] = aprUD7x3; - pack.timestamps[newRef.cursorIndex] = uint40(block.timestamp); - - // Increment the pack's cursor - pack.cursor++; - - // Write the updated pack in storage - self[newRef.packIndex] = pack; - } - - /** - * @notice Retrieves the APR of the latest checkpoint written in the APR history. - * @param self The history array to read APR from. - * @return The latest checkpoint's APR. - */ - function getAPR(Pack[] storage self) public view returns (uint16) { - // Retrieve the latest checkpoint data - Reference memory ref = getLatestReference(self); - CheckpointData memory data = getDataFromReference(self, ref); - - // Return the latest checkpoint's APR - return data.aprUD7x3; - } + /** + * @notice Represents data of a checkpoint extracted from the on-chain history. + * For on-chain representation see "Pack" struct. + * @param aprUD7x3 APR in UD7x3 format (e.g., 12345 = 12.345%). + * @param timestamp Timestamp of the checkpoint's creation. + */ + struct CheckpointData { + uint16 aprUD7x3; // Allows up to 65.536% + uint40 timestamp; // Supports dates up to 20/02/36812 + } + + /** + * @notice Represents how APR checkpoints are stored on chain. Each pack can contain + * the data 4 checkpoints. Packs are then stored in a dynamic array (the history). + * @param aprsUD7x3 Array of checkpoints' APRs. + * @param timestamps Array of checkpoints' timestamps. + * @param cursor Index of the next checkpoint to be written. + */ + struct Pack { + uint16[4] aprsUD7x3; + uint40[4] timestamps; + uint32 cursor; + } + + /** + * @notice Represents a storage pointer to a specific checkpoint in the history. + * @param packIndex Index of the pack the checkpoint belongs to. + * @param cursorIndex Index of the checkpoint in this pack (between 0 and 3). + */ + struct Reference { + uint256 packIndex; + uint32 cursorIndex; + } + + /** + * @notice Compares two checkpoints references. + * @param ref1 The first reference to compare. + * @param ref2 The second reference to compare. + * @return Whether the two references points to the same checkpoint. + */ + function eq( + Reference memory ref1, + Reference memory ref2 + ) external pure returns (bool) { + return + ref1.packIndex == ref2.packIndex && + ref1.cursorIndex == ref2.cursorIndex; + } + + /** + * @notice Returns the reference of the checkpoint that should come right after the + * referenced checkpoint in the APR history. + * @param ref The reference to be incremented. + * @return The incremented reference. + */ + function incrementReference( + Reference memory ref + ) public pure returns (Reference memory) { + // Ensure cursor index of the given ref is within valid range [0, 3] + require(ref.cursorIndex <= 3, "L1"); + + // If the given ref is the last slot in its pack, return ref of next pack's first slot + if (ref.cursorIndex == 3) return Reference(ref.packIndex + 1, 0); + // + // Else, return ref of next slot in current pack + else return Reference(ref.packIndex, ref.cursorIndex + 1); + } + + /** + * @notice Extracts checkpoint data from a given reference and in APR history. + * @param self The APR history to extract the checkpoint from. + * @param ref The reference of the checkpoint data to extract. + * @return The extracted checkpoint's data. + */ + function getDataFromReference( + Pack[] storage self, + Reference memory ref + ) public view returns (CheckpointData memory) { + // Ensure cursor index of the given ref is within valid range [0, 3] + require(ref.cursorIndex <= 3, "L2"); + + // Ensure pack index of the given ref exists in history + require(ref.packIndex < self.length, "L3"); + + // Retrieve pack data from history + Pack memory pack = self[ref.packIndex]; + + // Ensure cursor index of the given ref has been written + require(ref.cursorIndex < pack.cursor, "L4"); + + // Build and return the checkpoint data + return + CheckpointData({ + aprUD7x3: pack.aprsUD7x3[ref.cursorIndex], + timestamp: pack.timestamps[ref.cursorIndex] + }); + } + + /** + * @notice Retrieves the reference to the most recently added checkpoint in the APR history. + * @param self The history to extract the reference from. + * @return The reference of the latest checkpoint. + */ + function getLatestReference( + Pack[] storage self + ) public view returns (Reference memory) { + // Ensure the given history is not empty + require(self.length != 0, "L5"); + + // Retrieve latest pack's index and cursor + uint256 packIndex = self.length - 1; + uint32 packCursor = self[packIndex].cursor; + + // If this is the first pack ever, ensure it is not empty + if (packIndex == 0) require(packCursor != 0, "L6"); + + // If the pack is empty, return ref of previous pack's latest slot + if (packCursor == 0) return Reference(packIndex - 1, 3); + // + // Else, return ref of previous slot in current pack + else return Reference(packIndex, packCursor - 1); + } + + /** + * @notice Appends a new empty pack to the end of the given APR history array. + * @param self The APR history to append an empty to. + */ + function newBlankPack(Pack[] storage self) internal { + // If history is not empty, ensure the latest pack is full + require( + self.length == 0 || getLatestReference(self).cursorIndex == 3, + "L7" + ); + + // Push a new blank pack to the history array + self.push( + Pack({ + aprsUD7x3: [uint16(0), uint16(0), uint16(0), uint16(0)], + timestamps: [uint40(0), uint40(0), uint40(0), uint40(0)], + cursor: 0 + }) + ); + } + + /** + * @notice Write a new APR checkpoint at the end of the given history array. + * @param self The array of packs to write the new checkpoint to. + * @param aprUD7x3 The new APR in UD7x3 format. + */ + function setAPR(Pack[] storage self, uint16 aprUD7x3) external { + // Determine the reference where the new checkpoint should be written + Reference memory newRef = self.length == 0 + ? Reference(0, 0) + : incrementReference(getLatestReference(self)); + + // If pack to be written doesn't exist yet, push a new blank pack in history + if (newRef.packIndex >= self.length) newBlankPack(self); + + // Retrieve the pack where the new checkpoint will be stored + Pack memory pack = self[newRef.packIndex]; + + // Add new checkpoint's data to the pack + pack.aprsUD7x3[newRef.cursorIndex] = aprUD7x3; + pack.timestamps[newRef.cursorIndex] = uint40(block.timestamp); + + // Increment the pack's cursor + pack.cursor++; + + // Write the updated pack in storage + self[newRef.packIndex] = pack; + } + + /** + * @notice Retrieves the APR of the latest checkpoint written in the APR history. + * @param self The history array to read APR from. + * @return The latest checkpoint's APR. + */ + function getAPR(Pack[] storage self) public view returns (uint16) { + // Retrieve the latest checkpoint data + Reference memory ref = getLatestReference(self); + CheckpointData memory data = getDataFromReference(self, ref); + + // Return the latest checkpoint's APR + return data.aprUD7x3; + } } diff --git a/contracts/src/libs/SUD.sol b/contracts/src/libs/SUD.sol index 8e6ca17b..2bf4cc77 100644 --- a/contracts/src/libs/SUD.sol +++ b/contracts/src/libs/SUD.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; -import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; +import { IERC20MetadataUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; /** * @title SUD @@ -74,96 +74,116 @@ import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/tok * @custom:security-contact security@ledgity.com */ library SUD { - /** - * @notice Retrieves decimals number of the given ERC20 contract address. - * @param tokenAddress The address to retrieve decimals number from. - * @return decimals The decimals number of the given ERC20 contract address. - */ - function decimalsOf(address tokenAddress) internal view returns (uint256 decimals) { - return IERC20MetadataUpgradeable(tokenAddress).decimals(); - } + /** + * @notice Retrieves decimals number of the given ERC20 contract address. + * @param tokenAddress The address to retrieve decimals number from. + * @return decimals The decimals number of the given ERC20 contract address. + */ + function decimalsOf( + address tokenAddress + ) internal view returns (uint256 decimals) { + return IERC20MetadataUpgradeable(tokenAddress).decimals(); + } - /** - * @notice Convert a given token amount into SUD format. - * @param nAmount The token amount to convert. - * @param decimals The decimals number of the involved ERC20 token. - * @return nSUD The amount in SUD format - */ - function fromAmount(uint256 nAmount, uint256 decimals) internal pure returns (uint256 nSUD) { - // If token decimals < 3, return a UD71x6 number - if (decimals < 3) return nAmount * 10 ** (6 - decimals); + /** + * @notice Convert a given token amount into SUD format. + * @param nAmount The token amount to convert. + * @param decimals The decimals number of the involved ERC20 token. + * @return nSUD The amount in SUD format + */ + function fromAmount( + uint256 nAmount, + uint256 decimals + ) internal pure returns (uint256 nSUD) { + // If token decimals < 3, return a UD71x6 number + if (decimals < 3) return nAmount * 10 ** (6 - decimals); - // Else return a number with decimals+3 fractional digits - return nAmount * 10 ** 3; - } + // Else return a number with decimals+3 fractional digits + return nAmount * 10 ** 3; + } - /** - * @notice Convert a given SUD number into token amount format. - * @param nSUD The SUD number to convert. - * @param decimals The decimals number of the involved ERC20 token. - * @return nAmount The number in amount format - */ - function toAmount(uint256 nSUD, uint256 decimals) internal pure returns (uint256 nAmount) { - // If token decimals < 3, convert from a UD71x6 number - if (decimals < 3) return nSUD / 10 ** (6 - decimals); + /** + * @notice Convert a given SUD number into token amount format. + * @param nSUD The SUD number to convert. + * @param decimals The decimals number of the involved ERC20 token. + * @return nAmount The number in amount format + */ + function toAmount( + uint256 nSUD, + uint256 decimals + ) internal pure returns (uint256 nAmount) { + // If token decimals < 3, convert from a UD71x6 number + if (decimals < 3) return nSUD / 10 ** (6 - decimals); - // Else, convert from a number with decimals+3 fractional digits - return nSUD / 10 ** 3; - } + // Else, convert from a number with decimals+3 fractional digits + return nSUD / 10 ** 3; + } - /** - * @notice Converts a given UD7x3 rate into SUD format. - * @param nUD7x3 The UD7x3 rate to convert. - * @param decimals The decimals number of the involved ERC20 token. - * @return nSUD The rate in SUD format. - */ - function fromRate(uint256 nUD7x3, uint256 decimals) internal pure returns (uint256 nSUD) { - // If token decimals < 3, return a UD71x6 number - if (decimals < 3) return nUD7x3 * 10 ** 3; + /** + * @notice Converts a given UD7x3 rate into SUD format. + * @param nUD7x3 The UD7x3 rate to convert. + * @param decimals The decimals number of the involved ERC20 token. + * @return nSUD The rate in SUD format. + */ + function fromRate( + uint256 nUD7x3, + uint256 decimals + ) internal pure returns (uint256 nSUD) { + // If token decimals < 3, return a UD71x6 number + if (decimals < 3) return nUD7x3 * 10 ** 3; - // Else, return a number with decimals+3 fractional digits - return nUD7x3 * 10 ** decimals; - } + // Else, return a number with decimals+3 fractional digits + return nUD7x3 * 10 ** decimals; + } - /** - * @notice Converts a given SUD number into a UD7x3 rate. - * @param nSUD The SUD number to convert. - * @param decimals The decimals number of the involved ERC20 token. - * @return nUD7x3 The number in UD7x3 rate format. - */ - function toRate(uint256 nSUD, uint256 decimals) internal pure returns (uint256 nUD7x3) { - // If token decimals < 3, convert from a UD71x6 number - if (decimals < 3) return nSUD / 10 ** 3; + /** + * @notice Converts a given SUD number into a UD7x3 rate. + * @param nSUD The SUD number to convert. + * @param decimals The decimals number of the involved ERC20 token. + * @return nUD7x3 The number in UD7x3 rate format. + */ + function toRate( + uint256 nSUD, + uint256 decimals + ) internal pure returns (uint256 nUD7x3) { + // If token decimals < 3, convert from a UD71x6 number + if (decimals < 3) return nSUD / 10 ** 3; - // Else, convert from a number with decimals+3 fractional digits - return nSUD / 10 ** decimals; - } + // Else, convert from a number with decimals+3 fractional digits + return nSUD / 10 ** decimals; + } - /** - * @notice Converts a given integer into SUD format. - * @param n The integer to convert. - * @param decimals The decimals number of the involved ERC20 token. - * @return nSUD The integer in SUD format. - */ - function fromInt(uint256 n, uint256 decimals) internal pure returns (uint256 nSUD) { - // If token decimals < 3, return a UD71x6 number - if (decimals < 3) return n * 10 ** 6; + /** + * @notice Converts a given integer into SUD format. + * @param n The integer to convert. + * @param decimals The decimals number of the involved ERC20 token. + * @return nSUD The integer in SUD format. + */ + function fromInt( + uint256 n, + uint256 decimals + ) internal pure returns (uint256 nSUD) { + // If token decimals < 3, return a UD71x6 number + if (decimals < 3) return n * 10 ** 6; - // Else, return a number with decimals+3 fractional digits - return n * 10 ** (decimals + 3); - } + // Else, return a number with decimals+3 fractional digits + return n * 10 ** (decimals + 3); + } - /** - * @notice Converts a given SUD number as an integer (all decimals shrinked). - * @param nSUD The SUD number to convert. - * @param decimals The decimals number of the involved ERC20 token. - * @return n The SUD number as an integer. - */ - function toInt(uint256 nSUD, uint256 decimals) internal pure returns (uint256 n) { - // If token decimals < 3, convert from a UD71x6 number - if (decimals < 3) return nSUD / 10 ** 6; + /** + * @notice Converts a given SUD number as an integer (all decimals shrinked). + * @param nSUD The SUD number to convert. + * @param decimals The decimals number of the involved ERC20 token. + * @return n The SUD number as an integer. + */ + function toInt( + uint256 nSUD, + uint256 decimals + ) internal pure returns (uint256 n) { + // If token decimals < 3, convert from a UD71x6 number + if (decimals < 3) return nSUD / 10 ** 6; - // Else, convert from a number with decimals+3 fractional digits - return nSUD / 10 ** (decimals + 3); - } + // Else, convert from a number with decimals+3 fractional digits + return nSUD / 10 ** (decimals + 3); + } } diff --git a/env.mjs b/env.mjs index 7c231e71..e208b91e 100644 --- a/env.mjs +++ b/env.mjs @@ -13,6 +13,7 @@ export const env = createEnv({ NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID: z.string(), }, experimental__runtimeEnv: { - NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID, + NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID: + process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID, }, }); diff --git a/package.json b/package.json index f7df20f2..ea05b044 100644 --- a/package.json +++ b/package.json @@ -145,4 +145,4 @@ "path": "./node_modules/cz-conventional-changelog" } } -} \ No newline at end of file +} diff --git a/postcss.config.cjs b/postcss.config.cjs index 33ad091d..12a703d9 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -3,4 +3,4 @@ module.exports = { tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/report.md b/report.md index 8581d59e..ec86ef8f 100644 --- a/report.md +++ b/report.md @@ -1,211 +1,186 @@ **THIS CHECKLIST IS NOT COMPLETE**. Use `--show-ignored-findings` to show all the results. Summary - - [divide-before-multiply](#divide-before-multiply) (1 results) (Medium) - - [events-access](#events-access) (2 results) (Low) - - [events-maths](#events-maths) (4 results) (Low) - - [calls-loop](#calls-loop) (1 results) (Low) - - [reentrancy-events](#reentrancy-events) (2 results) (Low) - - [timestamp](#timestamp) (4 results) (Low) - - [costly-loop](#costly-loop) (3 results) (Informational) - - [low-level-calls](#low-level-calls) (1 results) (Informational) - - [naming-convention](#naming-convention) (1 results) (Informational) - - [redundant-statements](#redundant-statements) (4 results) (Informational) + +- [divide-before-multiply](#divide-before-multiply) (1 results) (Medium) +- [events-access](#events-access) (2 results) (Low) +- [events-maths](#events-maths) (4 results) (Low) +- [calls-loop](#calls-loop) (1 results) (Low) +- [reentrancy-events](#reentrancy-events) (2 results) (Low) +- [timestamp](#timestamp) (4 results) (Low) +- [costly-loop](#costly-loop) (3 results) (Informational) +- [low-level-calls](#low-level-calls) (1 results) (Informational) +- [naming-convention](#naming-convention) (1 results) (Informational) +- [redundant-statements](#redundant-statements) (4 results) (Informational) + ## divide-before-multiply + Impact: Medium Confidence: Medium - - [ ] ID-0 -[LDYStaking.earned(address,uint256)](contracts/src/LDYStaking.sol#L409-L416) performs a multiplication on the result of a division: - - [weightedAmount = (userInfo.stakedAmount * multiplier) / MULTIPLIER_BASIS](contracts/src/LDYStaking.sol#L412) - - [rewardsSinceLastUpdate = ((weightedAmount * (rewardPerToken() - userInfo.rewardPerTokenPaid)) / 1e18)](contracts/src/LDYStaking.sol#L413-L414) -contracts/src/LDYStaking.sol#L409-L416 +- [ ] ID-0 + [LDYStaking.earned(address,uint256)](contracts/src/LDYStaking.sol#L409-L416) performs a multiplication on the result of a division: - [weightedAmount = (userInfo.stakedAmount \* multiplier) / MULTIPLIER_BASIS](contracts/src/LDYStaking.sol#L412) - [rewardsSinceLastUpdate = ((weightedAmount \* (rewardPerToken() - userInfo.rewardPerTokenPaid)) / 1e18)](contracts/src/LDYStaking.sol#L413-L414) +contracts/src/LDYStaking.sol#L409-L416 ## events-access + Impact: Low Confidence: Medium - - [ ] ID-1 -[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L300-L306) should emit an event for: - - [withdrawer = withdrawer_](contracts/src/LToken.sol#L305) -contracts/src/LToken.sol#L300-L306 +- [ ] ID-1 + [LToken.setWithdrawer(address)](contracts/src/LToken.sol#L300-L306) should emit an event for: - [withdrawer = withdrawer\_](contracts/src/LToken.sol#L305) +contracts/src/LToken.sol#L300-L306 - - [ ] ID-2 -[LToken.setFund(address)](contracts/src/LToken.sol#L312-L318) should emit an event for: - - [fund = fund_](contracts/src/LToken.sol#L317) +- [ ] ID-2 + [LToken.setFund(address)](contracts/src/LToken.sol#L312-L318) should emit an event for: - [fund = fund\_](contracts/src/LToken.sol#L317) contracts/src/LToken.sol#L312-L318 - ## events-maths + Impact: Low Confidence: Medium - - [ ] ID-3 -[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L283-L286) should emit an event for: - - [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L285) -contracts/src/LToken.sol#L283-L286 +- [ ] ID-3 + [LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L283-L286) should emit an event for: - [retentionRateUD7x3 = retentionRateUD7x3\_](contracts/src/LToken.sol#L285) +contracts/src/LToken.sol#L283-L286 - - [ ] ID-4 -[LDYStaking.setStakeAmountForPerks(uint256)](contracts/src/LDYStaking.sol#L304-L306) should emit an event for: - - [stakeAmountForPerks = stakeAmountForPerks_](contracts/src/LDYStaking.sol#L305) +- [ ] ID-4 + [LDYStaking.setStakeAmountForPerks(uint256)](contracts/src/LDYStaking.sol#L304-L306) should emit an event for: - [stakeAmountForPerks = stakeAmountForPerks\_](contracts/src/LDYStaking.sol#L305) contracts/src/LDYStaking.sol#L304-L306 - - - [ ] ID-5 -[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L272-L275) should emit an event for: - - [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L274) +- [ ] ID-5 + [LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L272-L275) should emit an event for: - [feesRateUD7x3 = feesRateUD7x3\_](contracts/src/LToken.sol#L274) contracts/src/LToken.sol#L272-L275 - - - [ ] ID-6 -[LDYStaking.setStakeDurationForPerks(uint256)](contracts/src/LDYStaking.sol#L295-L297) should emit an event for: - - [stakeDurationForPerks = stakeDurationForPerks_](contracts/src/LDYStaking.sol#L296) +- [ ] ID-6 + [LDYStaking.setStakeDurationForPerks(uint256)](contracts/src/LDYStaking.sol#L295-L297) should emit an event for: - [stakeDurationForPerks = stakeDurationForPerks\_](contracts/src/LDYStaking.sol#L296) contracts/src/LDYStaking.sol#L295-L297 - ## calls-loop + Impact: Low Confidence: Medium - - [ ] ID-7 -[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L603-L621) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L608) -contracts/src/LToken.sol#L603-L621 +- [ ] ID-7 + [LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L603-L621) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L608) +contracts/src/LToken.sol#L603-L621 ## reentrancy-events + Impact: Low Confidence: Medium - - [ ] ID-8 -Reentrancy in [LDYStaking.notifyRewardAmount(uint256)](contracts/src/LDYStaking.sol#L346-L374): - External calls: - - [stakeRewardToken.safeTransferFrom(_msgSender(),address(this),amount)](contracts/src/LDYStaking.sol#L371) - Event emitted after the call(s): - - [NotifiedRewardAmount(amount,rewardRatePerSec)](contracts/src/LDYStaking.sol#L373) -contracts/src/LDYStaking.sol#L346-L374 +- [ ] ID-8 + Reentrancy in [LDYStaking.notifyRewardAmount(uint256)](contracts/src/LDYStaking.sol#L346-L374): + External calls: - [stakeRewardToken.safeTransferFrom(\_msgSender(),address(this),amount)](contracts/src/LDYStaking.sol#L371) + Event emitted after the call(s): - [NotifiedRewardAmount(amount,rewardRatePerSec)](contracts/src/LDYStaking.sol#L373) +contracts/src/LDYStaking.sol#L346-L374 - - [ ] ID-9 -Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851): - External calls: - - [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L829) - Event emitted after the call(s): - - [ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))](contracts/src/LToken.sol#L777-L785) - - [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)](contracts/src/LToken.sol#L810-L818) +- [ ] ID-9 + Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851): + External calls: - [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L829) + Event emitted after the call(s): - [ActivityEvent(int256(nextRequestId),\_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))](contracts/src/LToken.sol#L777-L785) - [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)](contracts/src/LToken.sol#L810-L818) contracts/src/LToken.sol#L740-L851 - ## timestamp + Impact: Low Confidence: Medium - - [ ] ID-10 -[LDYStaking.unstake(uint256,uint256)](contracts/src/LDYStaking.sol#L218-L263) uses timestamp for comparisons - Dangerous comparisons: - - [require(bool,string)(block.timestamp >= userStakingInfo[_msgSender()][stakeIndex].unStakeAt,Cannot unstake during staking period)](contracts/src/LDYStaking.sol#L224-L227) -contracts/src/LDYStaking.sol#L218-L263 +- [ ] ID-10 + [LDYStaking.unstake(uint256,uint256)](contracts/src/LDYStaking.sol#L218-L263) uses timestamp for comparisons + Dangerous comparisons: - [require(bool,string)(block.timestamp >= userStakingInfo[\_msgSender()][stakeIndex].unStakeAt,Cannot unstake during staking period)](contracts/src/LDYStaking.sol#L224-L227) +contracts/src/LDYStaking.sol#L218-L263 - - [ ] ID-11 -[LDYStaking.notifyRewardAmount(uint256)](contracts/src/LDYStaking.sol#L346-L374) uses timestamp for comparisons - Dangerous comparisons: - - [block.timestamp >= finishAt](contracts/src/LDYStaking.sol#L352) - - [require(bool,string)(rewardRatePerSec > 0,reward rate = 0)](contracts/src/LDYStaking.sol#L359) - - [require(bool,string)(rewardRatePerSec <= (stakeRewardToken.balanceOf(address(this)) + amount - totalStaked) / rewardsDuration,reward amount > balance)](contracts/src/LDYStaking.sol#L360-L365) +- [ ] ID-11 + [LDYStaking.notifyRewardAmount(uint256)](contracts/src/LDYStaking.sol#L346-L374) uses timestamp for comparisons + Dangerous comparisons: - [block.timestamp >= finishAt](contracts/src/LDYStaking.sol#L352) - [require(bool,string)(rewardRatePerSec > 0,reward rate = 0)](contracts/src/LDYStaking.sol#L359) - [require(bool,string)(rewardRatePerSec <= (stakeRewardToken.balanceOf(address(this)) + amount - totalStaked) / rewardsDuration,reward amount > balance)](contracts/src/LDYStaking.sol#L360-L365) contracts/src/LDYStaking.sol#L346-L374 - - - [ ] ID-12 -[LDYStaking.setRewardsDuration(uint256)](contracts/src/LDYStaking.sol#L285-L288) uses timestamp for comparisons - Dangerous comparisons: - - [require(bool,string)(finishAt < block.timestamp,reward duration is not finished)](contracts/src/LDYStaking.sol#L286) +- [ ] ID-12 + [LDYStaking.setRewardsDuration(uint256)](contracts/src/LDYStaking.sol#L285-L288) uses timestamp for comparisons + Dangerous comparisons: - [require(bool,string)(finishAt < block.timestamp,reward duration is not finished)](contracts/src/LDYStaking.sol#L286) contracts/src/LDYStaking.sol#L285-L288 - - - [ ] ID-13 -[LDYStaking._min(uint256,uint256)](contracts/src/LDYStaking.sol#L513-L515) uses timestamp for comparisons - Dangerous comparisons: - - [x <= y](contracts/src/LDYStaking.sol#L514) +- [ ] ID-13 + [LDYStaking.\_min(uint256,uint256)](contracts/src/LDYStaking.sol#L513-L515) uses timestamp for comparisons + Dangerous comparisons: - [x <= y](contracts/src/LDYStaking.sol#L514) contracts/src/LDYStaking.sol#L513-L515 - ## costly-loop + Impact: Informational Confidence: Medium - - [ ] ID-14 -[LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851) has costly operations inside a loop: - - [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L767) -contracts/src/LToken.sol#L740-L851 +- [ ] ID-14 + [LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851) has costly operations inside a loop: - [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L767) +contracts/src/LToken.sol#L740-L851 - - [ ] ID-15 -[LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851) has costly operations inside a loop: - - [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L821) +- [ ] ID-15 + [LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851) has costly operations inside a loop: - [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L821) contracts/src/LToken.sol#L740-L851 - - - [ ] ID-16 -[LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851) has costly operations inside a loop: - - [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L788) +- [ ] ID-16 + [LToken.processQueuedRequests()](contracts/src/LToken.sol#L740-L851) has costly operations inside a loop: - [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L788) contracts/src/LToken.sol#L740-L851 - ## low-level-calls + Impact: Informational Confidence: High - - [ ] ID-17 -Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L679-L733): - - [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L731) -contracts/src/LToken.sol#L679-L733 +- [ ] ID-17 + Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L679-L733): - [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L731) +contracts/src/LToken.sol#L679-L733 ## naming-convention + Impact: Informational Confidence: High - - [ ] ID-18 -Constant [LToken.MAX_FEES_RATE_UD7x3](contracts/src/LToken.sol#L89) is not in UPPER_CASE_WITH_UNDERSCORES -contracts/src/LToken.sol#L89 +- [ ] ID-18 + Constant [LToken.MAX_FEES_RATE_UD7x3](contracts/src/LToken.sol#L89) is not in UPPER_CASE_WITH_UNDERSCORES +contracts/src/LToken.sol#L89 ## redundant-statements + Impact: Informational Confidence: High - - [ ] ID-19 -Redundant expression "[amount](contracts/src/LToken.sol#L553)" in[LToken](contracts/src/LToken.sol#L57-L1007) -contracts/src/LToken.sol#L553 +- [ ] ID-19 + Redundant expression "[amount](contracts/src/LToken.sol#L553)" in[LToken](contracts/src/LToken.sol#L57-L1007) +contracts/src/LToken.sol#L553 - - [ ] ID-20 -Redundant expression "[account](contracts/src/LToken.sol#L563)" in[LToken](contracts/src/LToken.sol#L57-L1007) +- [ ] ID-20 + Redundant expression "[account](contracts/src/LToken.sol#L563)" in[LToken](contracts/src/LToken.sol#L57-L1007) contracts/src/LToken.sol#L563 - - - [ ] ID-21 -Redundant expression "[account](contracts/src/LToken.sol#L552)" in[LToken](contracts/src/LToken.sol#L57-L1007) +- [ ] ID-21 + Redundant expression "[account](contracts/src/LToken.sol#L552)" in[LToken](contracts/src/LToken.sol#L57-L1007) contracts/src/LToken.sol#L552 - - - [ ] ID-22 -Redundant expression "[amount](contracts/src/LToken.sol#L564)" in[LToken](contracts/src/LToken.sol#L57-L1007) +- [ ] ID-22 + Redundant expression "[amount](contracts/src/LToken.sol#L564)" in[LToken](contracts/src/LToken.sol#L57-L1007) contracts/src/LToken.sol#L564 - - diff --git a/scripts/extract-abis.mts b/scripts/extract-abis.mts index 2b3f513a..ec73b05f 100644 --- a/scripts/extract-abis.mts +++ b/scripts/extract-abis.mts @@ -5,14 +5,17 @@ import * as fs from "fs"; import * as path from "path"; -import { fileURLToPath } from 'url'; -import { dirname } from 'path'; +import { fileURLToPath } from "url"; +import { dirname } from "path"; // For cross-platform compatibility const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const sourceDirectory = path.join(__dirname, "../contracts/hardhat/artifacts/contracts/src"); +const sourceDirectory = path.join( + __dirname, + "../contracts/hardhat/artifacts/contracts/src", +); const destinationDirectory = path.join(__dirname, "../contracts/abis"); // Ensure 'contracts/abis/' directory exists or create it. @@ -46,5 +49,3 @@ const extractABIsFromDirectory = async (directory: string) => { await extractABIsFromDirectory(sourceDirectory); console.log("ABIs extracted successfully!"); - - diff --git a/secrets.example.json b/secrets.example.json index b17d0f91..e8665dcc 100644 --- a/secrets.example.json +++ b/secrets.example.json @@ -6,4 +6,4 @@ "BASESCAN_API_KEY": "", "OKXSCAN_API_KEY": "", "MAINNET_RPC_URL": "" -} \ No newline at end of file +} diff --git a/slither.db.json b/slither.db.json index 4438515b..77546c41 100644 --- a/slither.db.json +++ b/slither.db.json @@ -1 +1,45525 @@ -[{"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10525, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)", "source_mapping": {"start": 10958, "length": 89, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [269], "starting_column": 9, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10525, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", "source_mapping": {"start": 11179, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [273], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10525, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#258-279) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d) (contracts/src/abstracts/InvestUpgradeable.sol#269)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#273)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L258-L279) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)](contracts/src/abstracts/InvestUpgradeable.sol#L269)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L273)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L258-L279", "id": "837ac7a6a8e8bb10145a855bbb3b2bb1e17032f56c23cffeb8c2e84e7aa42fc6", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10525, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", "source_mapping": {"start": 11179, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [273], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10525, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)", "source_mapping": {"start": 11369, "length": 74, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [277], "starting_column": 9, "ending_column": 83}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10525, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#258-279) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#273)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d) (contracts/src/abstracts/InvestUpgradeable.sol#277)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L258-L279) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L273)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)](contracts/src/abstracts/InvestUpgradeable.sol#L277)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L258-L279", "id": "7328cf6c14e774619c3e88720bfbdb1dad7e658c4fffc3f7ff22d6a9bebc055e", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17747, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18314, "length": 68, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [417], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17747, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#409-444) uses a dangerous strict equality:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#417)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L409-L444) uses a dangerous strict equality:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L417)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L409-L444", "id": "8cbaf27ca32165ef672a505abcf410858caaf63e3bfb61ca4259a5aec3971107", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_isClaiming", "source_mapping": {"start": 3810, "length": 24, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [88], "starting_column": 5, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}}}, {"type": "node", "name": "_isClaiming = true", "source_mapping": {"start": 19051, "length": 18, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [434], "starting_column": 13, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17747, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}, {"type": "node", "name": "_isClaiming = false", "source_mapping": {"start": 19152, "length": 19, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [436], "starting_column": 13, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17747, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#88) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#434)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#436)\n", "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L88) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L434)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L436)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L88", "id": "25837e9ca3a7500571073e3e39f0c7471fc9f72107c4c0280839400c874ffefa", "check": "write-after-write", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11867, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [296, 297, 298, 299, 300, 301, 302], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}, {"type": "node", "name": "withdrawer = withdrawer_", "source_mapping": {"start": 12136, "length": 24, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [301], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11867, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [296, 297, 298, 299, 300, 301, 302], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}}}], "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#296-302) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#301) \n", "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L296-L302) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L301) \n", "first_markdown_element": "contracts/src/LToken.sol#L296-L302", "id": "625d3676f2a66d053207d6550074361bcf291dc08d5883717dfe47a75eae4f43", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFund", "source_mapping": {"start": 12300, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [308, 309, 310, 311, 312, 313, 314], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}, {"type": "node", "name": "fund = fund_", "source_mapping": {"start": 12542, "length": 12, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [313], "starting_column": 9, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "function", "name": "setFund", "source_mapping": {"start": 12300, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [308, 309, 310, 311, 312, 313, 314], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}}}], "description": "LToken.setFund(address) (contracts/src/LToken.sol#308-314) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#313) \n", "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L308-L314) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L313) \n", "first_markdown_element": "contracts/src/LToken.sol#L308-L314", "id": "f3bc101edb5e26995222fe505f1dc0208c90fe525c666554e266478f58dd39d8", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10784, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [269, 270, 271], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}, {"type": "node", "name": "feesRateUD7x3 = feesRateUD7x3_", "source_mapping": {"start": 10855, "length": 30, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [270], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10784, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [269, 270, 271], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}], "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#269-271) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#270) \n", "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L269-L271) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L270) \n", "first_markdown_element": "contracts/src/LToken.sol#L269-L271", "id": "e92fbf70ede64c48fe16c5ec116fd98951f676a72c04542046473ad50c05713e", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11232, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [279, 280, 281, 282], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}, {"type": "node", "name": "retentionRateUD7x3 = retentionRateUD7x3_", "source_mapping": {"start": 11386, "length": 40, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [281], "starting_column": 9, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11232, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [279, 280, 281, 282], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}], "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#279-282) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#281) \n", "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L279-L282) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L281) \n", "first_markdown_element": "contracts/src/LToken.sol#L279-L282", "id": "5fd922d632eb570c72c19b92edf9234802f24cf4c8ed15c8c5b5c2e9c8bf4b56", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "isBlacklisted", "source_mapping": {"start": 2571, "length": 132, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [68, 69, 70], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 890, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], "starting_column": 1, "ending_column": 2}}, "signature": "isBlacklisted(address)"}}, {"type": "node", "name": "_globalBlacklist.isBlacklisted(account)", "source_mapping": {"start": 2650, "length": 46, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [69], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "isBlacklisted", "source_mapping": {"start": 2571, "length": 132, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [68, 69, 70], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 890, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], "starting_column": 1, "ending_column": 2}}, "signature": "isBlacklisted(address)"}}}}], "description": "GlobalRestrictableUpgradeable.isBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#68-70) has external calls inside a loop: _globalBlacklist.isBlacklisted(account) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#69)\n", "markdown": "[GlobalRestrictableUpgradeable.isBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L68-L70) has external calls inside a loop: [_globalBlacklist.isBlacklisted(account)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L69)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L68-L70", "id": "0285e3d5aa98a28122a5d7624a14a96c6eee44b58b54658687a5e2b342e157b3", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "decimalsOf", "source_mapping": {"start": 4219, "length": 157, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "SUD", "source_mapping": {"start": 3953, "length": 3844, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169], "starting_column": 1, "ending_column": 2}}, "signature": "decimalsOf(address)"}}, {"type": "node", "name": "IERC20MetadataUpgradeable(tokenAddress).decimals()", "source_mapping": {"start": 4312, "length": 57, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [83], "starting_column": 9, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "decimalsOf", "source_mapping": {"start": 4219, "length": 157, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "SUD", "source_mapping": {"start": 3953, "length": 3844, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169], "starting_column": 1, "ending_column": 2}}, "signature": "decimalsOf(address)"}}}}], "description": "SUD.decimalsOf(address) (contracts/src/libs/SUD.sol#82-84) has external calls inside a loop: IERC20MetadataUpgradeable(tokenAddress).decimals() (contracts/src/libs/SUD.sol#83)\n", "markdown": "[SUD.decimalsOf(address)](contracts/src/libs/SUD.sol#L82-L84) has external calls inside a loop: [IERC20MetadataUpgradeable(tokenAddress).decimals()](contracts/src/libs/SUD.sol#L83)\n", "first_markdown_element": "contracts/src/libs/SUD.sol#L82-L84", "id": "2ef4e42ca875343923b559ebd74f8b93e458135c224ca543a0be7afbe8c972ee", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24639, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}, {"type": "node", "name": "ldyStaking.tierOf(account) >= 2", "source_mapping": {"start": 24880, "length": 31, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [604], "starting_column": 13, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24639, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#599-617) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#604)\n", "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L599-L617) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L604)\n", "first_markdown_element": "contracts/src/LToken.sol#L599-L617", "id": "b36a651b8a7e1aa6949522b1bcf7e762a3985cc13393b17fbea6861534d6fef4", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "underlying().safeTransfer(request.account,withdrawnAmount)", "source_mapping": {"start": 34190, "length": 59, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [825], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))", "source_mapping": {"start": 32058, "length": 308, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [773, 774, 775, 776, 777, 778, 779, 780, 781], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)", "source_mapping": {"start": 33359, "length": 289, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [806, 807, 808, 809, 810, 811, 812, 813, 814], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#825)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length)) (contracts/src/LToken.sol#773-781)\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID) (contracts/src/LToken.sol#806-814)\n", "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L825)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))](contracts/src/LToken.sol#L773-L781)\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)](contracts/src/LToken.sol#L806-L814)\n", "first_markdown_element": "contracts/src/LToken.sol#L736-L847", "id": "25641a1536005499f5fd91ee9c43ed2fe71583aad1cb18782da427ee15d0843d", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17747, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18314, "length": 68, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [417], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17747, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#409-444) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#417)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L409-L444) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L417)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L409-L444", "id": "6c49708455669adb75db0149ef062a23944bbc6888c309816a301d9bcafcc62a", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "notBlacklisted", "source_mapping": {"start": 2251, "length": 115, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [58, 59, 60, 61], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 890, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], "starting_column": 1, "ending_column": 2}}, "signature": "notBlacklisted(address)"}}, {"type": "node", "name": "require(bool,string)(isBlacklisted(account) == false,L9)", "source_mapping": {"start": 2302, "length": 46, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [59], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "notBlacklisted", "source_mapping": {"start": 2251, "length": 115, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [58, 59, 60, 61], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 890, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], "starting_column": 1, "ending_column": 2}}, "signature": "notBlacklisted(address)"}}}}], "description": "GlobalRestrictableUpgradeable.notBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#58-61) compares to a boolean constant:\n\t-require(bool,string)(isBlacklisted(account) == false,L9) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#59)\n", "markdown": "[GlobalRestrictableUpgradeable.notBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L61) compares to a boolean constant:\n\t-[require(bool,string)(isBlacklisted(account) == false,L9)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L59)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L61", "id": "f16fec669c66f677dbc6a70cef67c51cb63c39c9231d6af42ace039cc125bdb8", "check": "boolean-equal", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31522, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [763], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#763)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L763)\n", "first_markdown_element": "contracts/src/LToken.sol#L736-L847", "id": "9df05006eba73fa3355e40d39323dec9d4149e5589ee1aab775d6e57c2ebd4c0", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 32430, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [784], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#784)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L784)\n", "first_markdown_element": "contracts/src/LToken.sol#L736-L847", "id": "17aa185ced928455cb5b607b542dd76f8f4cc9705fb94e166c47b2df1432d536", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 33712, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [817], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30085, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#817)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L817)\n", "first_markdown_element": "contracts/src/LToken.sol#L736-L847", "id": "fa620a3555265f1ce1df3715e5f94fd62d220b1942b40737b24858d749798199", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9719, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [241, 242, 243, 244, 245], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}], "description": "InvestUpgradeable._distributeRewards(address,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#241-245) is never used and should be removed\n", "markdown": "[InvestUpgradeable._distributeRewards(address,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L241-L245) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L241-L245", "id": "4ce5597a49ce11c0d0e1fdbd9adaef136a31a232eff135fedab3b33cff3f3996", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "toInt", "source_mapping": {"start": 7477, "length": 318, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [162, 163, 164, 165, 166, 167, 168], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "SUD", "source_mapping": {"start": 3953, "length": 3844, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169], "starting_column": 1, "ending_column": 2}}, "signature": "toInt(uint256,uint256)"}}], "description": "SUD.toInt(uint256,uint256) (contracts/src/libs/SUD.sol#162-168) is never used and should be removed\n", "markdown": "[SUD.toInt(uint256,uint256)](contracts/src/libs/SUD.sol#L162-L168) is never used and should be removed\n", "first_markdown_element": "contracts/src/libs/SUD.sol#L162-L168", "id": "38b5c05a1f70a50973749339bd7f6ce4ece3f42a379057b9bcaed504a5b11599", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27940, "length": 1895, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 29745, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [727], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27940, "length": 1895, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#675-729):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#727)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L675-L729):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L727)\n", "first_markdown_element": "contracts/src/LToken.sol#L675-L729", "id": "e3d29d366ad1b4a64677a5a5b95da44d95591c957fb06f94687115b1d6222d28", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 22923, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [548], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22824, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [547, 548, 549, 550, 551], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#548)\" inLToken (contracts/src/LToken.sol#57-1003)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L548)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", "first_markdown_element": "contracts/src/LToken.sol#L548", "id": "b10bf22e5a95b25b2ca053ed16988f894b3cf456f256005de2029e07dd150f33", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 22984, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [549], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22824, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [547, 548, 549, 550, 551], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#549)\" inLToken (contracts/src/LToken.sol#57-1003)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L549)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", "first_markdown_element": "contracts/src/LToken.sol#L549", "id": "8976b44a250d3a3c00a06a2e2a81c4a1b920f03acedc22b2b270296f522aaa32", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 23301, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [559], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23202, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [558, 559, 560, 561, 562], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#559)\" inLToken (contracts/src/LToken.sol#57-1003)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L559)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", "first_markdown_element": "contracts/src/LToken.sol#L559", "id": "4dca8a634600c9bd68f1fcc283c628cc82869f305b84dcc67ef831f37a375ee2", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 23362, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [560], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23202, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [558, 559, 560, 561, 562], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2929, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#560)\" inLToken (contracts/src/LToken.sol#57-1003)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L560)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", "first_markdown_element": "contracts/src/LToken.sol#L560", "id": "7d12381b7d038575e3ab1580c7591a8e3451356288a22633713ded811885dc88", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "newOwner", "source_mapping": {"start": 2898, "length": 8, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [70], "starting_column": 9, "ending_column": 17}, "type_specific_fields": {"parent": {"type": "function", "name": "transferOwnership", "source_mapping": {"start": 2812, "length": 167, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [69, 70, 71, 72], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 952, "length": 2603, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], "starting_column": 1, "ending_column": 2}}, "signature": "transferOwnership(address)"}}}}, {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 952, "length": 2603, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"newOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#70)\" inGlobalOwnableUpgradeable (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#24-88)\n", "markdown": "Redundant expression \"[newOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L70)\" in[GlobalOwnableUpgradeable](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L24-L88)\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L70", "id": "b15122e2e76997cd89b2eda286a279686178679382e4696c7cb5b756091209a2", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 9822, "length": 7, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [242], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9719, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [241, 242, 243, 244, 245], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#242)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#50-452)\n", "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L242)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L50-L452)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L242", "id": "4327808fdf1909bf374d32bad0df0fa5fc266916511b21230857c9fd952f389d", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 9875, "length": 6, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [243], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9719, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [241, 242, 243, 244, 245], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2319, "length": 17456, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#243)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#50-452)\n", "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L243)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L50-L452)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L243", "id": "ea7adefce3b89bca037df83b3cf6b48a21e6399d6fc1cfc71e5a3fb135b590d6", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "underlyingToken.safeTransfer(unlockAccount,unlockAmount)", "source_mapping": {"start": 16610, "length": 57, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [406], "starting_column": 17, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "delete unlockRequests[processedId]", "source_mapping": {"start": 16502, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [403], "starting_column": 17, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "unlockRequests"}}, {"type": "node", "name": "unlockRequestsCursor = processedId", "source_mapping": {"start": 16820, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [414], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "unlockRequestsCursor"}}], "description": "Reentrancy in PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415):\n\tExternal calls:\n\t- underlyingToken.safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#406)\n\tState variables written after the call(s):\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#403)\n\tPreMining.unlockRequests (contracts/src/PreMining.sol#108) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415)\n\t- PreMining.requestUnlock() (contracts/src/PreMining.sol#368-375)\n\t- PreMining.unlockRequests (contracts/src/PreMining.sol#108)\n\t- unlockRequestsCursor = processedId (contracts/src/PreMining.sol#414)\n\tPreMining.unlockRequestsCursor (contracts/src/PreMining.sol#111) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415)\n\t- PreMining.unlockRequestsCursor (contracts/src/PreMining.sol#111)\n", "markdown": "Reentrancy in [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415):\n\tExternal calls:\n\t- [underlyingToken.safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L406)\n\tState variables written after the call(s):\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L403)\n\t[PreMining.unlockRequests](contracts/src/PreMining.sol#L108) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415)\n\t- [PreMining.requestUnlock()](contracts/src/PreMining.sol#L368-L375)\n\t- [PreMining.unlockRequests](contracts/src/PreMining.sol#L108)\n\t- [unlockRequestsCursor = processedId](contracts/src/PreMining.sol#L414)\n\t[PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L111) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415)\n\t- [PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L111)\n", "first_markdown_element": "contracts/src/PreMining.sol#L381-L415", "id": "9a6cb6e9f5e0d280f4c1853f9519dac80e799c5c7adca3cf424917f988730076", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "underlyingToken.balanceOf(address(this)) < unlockAmount", "source_mapping": {"start": 16383, "length": 55, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [400], "starting_column": 21, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415) has external calls inside a loop: underlyingToken.balanceOf(address(this)) < unlockAmount (contracts/src/PreMining.sol#400)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415) has external calls inside a loop: [underlyingToken.balanceOf(address(this)) < unlockAmount](contracts/src/PreMining.sol#L400)\n", "first_markdown_element": "contracts/src/PreMining.sol#L381-L415", "id": "861f8eb02cb47daafe61a2e41d4d485f3912ddabe2a89211ddd1778c600a216d", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 8662, "length": 1443, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}, {"type": "node", "name": "require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)", "source_mapping": {"start": 9398, "length": 56, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [240], "starting_column": 9, "ending_column": 65}, "type_specific_fields": {"parent": {"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 8662, "length": 1443, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}}}, {"type": "node", "name": "require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)", "source_mapping": {"start": 9960, "length": 56, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [251], "starting_column": 9, "ending_column": 65}, "type_specific_fields": {"parent": {"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 8662, "length": 1443, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}}}], "description": "PreMining.startRecoveryPhase() (contracts/src/PreMining.sol#224-255) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(block.timestamp >= afterVestingTimestamp,L80) (contracts/src/PreMining.sol#240)\n\t- require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81) (contracts/src/PreMining.sol#251)\n", "markdown": "[PreMining.startRecoveryPhase()](contracts/src/PreMining.sol#L224-L255) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)](contracts/src/PreMining.sol#L240)\n\t- [require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)](contracts/src/PreMining.sol#L251)\n", "first_markdown_element": "contracts/src/PreMining.sol#L224-L255", "id": "1f2f5039918968476f793f25a7d63de91a06b20221717b90e5860d7f4470d09c", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "availableToClaim", "source_mapping": {"start": 17178, "length": 902, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}, {"type": "node", "name": "elapsedTime > vestingInSeconds", "source_mapping": {"start": 17686, "length": 30, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [432], "starting_column": 13, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "availableToClaim", "source_mapping": {"start": 17178, "length": 902, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}}}], "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#423-439) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- elapsedTime > vestingInSeconds (contracts/src/PreMining.sol#432)\n", "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L423-L439) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [elapsedTime > vestingInSeconds](contracts/src/PreMining.sol#L432)\n", "first_markdown_element": "contracts/src/PreMining.sol#L423-L439", "id": "7112e5ff225ea1c26841de0afa9fb9344b110c059de80dda1bd559f8cfb52e0c", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "delete unlockRequests[processedId]", "source_mapping": {"start": 16502, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [403], "starting_column": 17, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 15459, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1812, "length": 16819, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415) has costly operations inside a loop:\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#403)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415) has costly operations inside a loop:\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L403)\n", "first_markdown_element": "contracts/src/PreMining.sol#L381-L415", "id": "16d29ef13ec25c1a2abfc852b098e6fa21dceb5d857f3925a1e6c5c85cd27f84", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "underlyingToken.safeTransfer(unlockAccount,unlockAmount)", "source_mapping": {"start": 18092, "length": 57, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [436], "starting_column": 17, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "delete unlockRequests[processedId]", "source_mapping": {"start": 17984, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433], "starting_column": 17, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "unlockRequests"}}, {"type": "node", "name": "unlockRequestsCursor = processedId", "source_mapping": {"start": 18302, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [444], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "unlockRequestsCursor"}}], "description": "Reentrancy in PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445):\n\tExternal calls:\n\t- underlyingToken.safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#436)\n\tState variables written after the call(s):\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#433)\n\tPreMining.unlockRequests (contracts/src/PreMining.sol#115) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445)\n\t- PreMining.requestUnlock() (contracts/src/PreMining.sol#398-405)\n\t- PreMining.unlockRequests (contracts/src/PreMining.sol#115)\n\t- unlockRequestsCursor = processedId (contracts/src/PreMining.sol#444)\n\tPreMining.unlockRequestsCursor (contracts/src/PreMining.sol#118) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445)\n\t- PreMining.unlockRequestsCursor (contracts/src/PreMining.sol#118)\n", "markdown": "Reentrancy in [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445):\n\tExternal calls:\n\t- [underlyingToken.safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L436)\n\tState variables written after the call(s):\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L433)\n\t[PreMining.unlockRequests](contracts/src/PreMining.sol#L115) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445)\n\t- [PreMining.requestUnlock()](contracts/src/PreMining.sol#L398-L405)\n\t- [PreMining.unlockRequests](contracts/src/PreMining.sol#L115)\n\t- [unlockRequestsCursor = processedId](contracts/src/PreMining.sol#L444)\n\t[PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L118) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445)\n\t- [PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L118)\n", "first_markdown_element": "contracts/src/PreMining.sol#L411-L445", "id": "883510f269d1f3304c617ceef940f58384c77ae8819538bc98ecd065b9e4cf59", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "underlyingToken.balanceOf(address(this)) < unlockAmount", "source_mapping": {"start": 17865, "length": 55, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [430], "starting_column": 21, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445) has external calls inside a loop: underlyingToken.balanceOf(address(this)) < unlockAmount (contracts/src/PreMining.sol#430)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445) has external calls inside a loop: [underlyingToken.balanceOf(address(this)) < unlockAmount](contracts/src/PreMining.sol#L430)\n", "first_markdown_element": "contracts/src/PreMining.sol#L411-L445", "id": "d37a26a87b3db62be9ea37a93cd077a3659871f2168423f9c8d5fd2e889882e2", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 9035, "length": 1464, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}, {"type": "node", "name": "require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)", "source_mapping": {"start": 9792, "length": 56, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [252], "starting_column": 9, "ending_column": 65}, "type_specific_fields": {"parent": {"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 9035, "length": 1464, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}}}, {"type": "node", "name": "require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)", "source_mapping": {"start": 10354, "length": 56, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [263], "starting_column": 9, "ending_column": 65}, "type_specific_fields": {"parent": {"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 9035, "length": 1464, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}}}], "description": "PreMining.startRecoveryPhase() (contracts/src/PreMining.sol#236-267) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(block.timestamp >= afterVestingTimestamp,L80) (contracts/src/PreMining.sol#252)\n\t- require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81) (contracts/src/PreMining.sol#263)\n", "markdown": "[PreMining.startRecoveryPhase()](contracts/src/PreMining.sol#L236-L267) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)](contracts/src/PreMining.sol#L252)\n\t- [require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)](contracts/src/PreMining.sol#L263)\n", "first_markdown_element": "contracts/src/PreMining.sol#L236-L267", "id": "a6eaeb609b68e62bbd34c915475c3897dd4b6c20a96987a44641673b1c050beb", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18660, "length": 915, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}, {"type": "node", "name": "elapsedTime > vestingInSeconds", "source_mapping": {"start": 19181, "length": 30, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [462], "starting_column": 13, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18660, "length": 915, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}}}], "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#453-469) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- elapsedTime > vestingInSeconds (contracts/src/PreMining.sol#462)\n", "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L453-L469) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [elapsedTime > vestingInSeconds](contracts/src/PreMining.sol#L462)\n", "first_markdown_element": "contracts/src/PreMining.sol#L453-L469", "id": "83005110927ad67b68aa0b369db3e0aa9f212851680ef48c3e26ef5fecef52fa", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "delete unlockRequests[processedId]", "source_mapping": {"start": 17984, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433], "starting_column": 17, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16941, "length": 1402, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18251, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445) has costly operations inside a loop:\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#433)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445) has costly operations inside a loop:\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L433)\n", "first_markdown_element": "contracts/src/PreMining.sol#L411-L445", "id": "39b3316d01f658c3a0d45a6a7ecd218085928361983ae51427e424ef11eed450", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18160, "length": 1341, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}, {"type": "node", "name": "elapsedMonthsS3 = (elapsedTimeS3 * 10 ** 3) / ONE_MONTH_IN_SECONDS_S3", "source_mapping": {"start": 18671, "length": 77, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [441], "starting_column": 9, "ending_column": 86}, "type_specific_fields": {"parent": {"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18160, "length": 1341, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}}}, {"type": "node", "name": "totalAvailableToClaim = (totalEligibleRewards * elapsedMonthsS3) / rewardsVestingS3", "source_mapping": {"start": 18903, "length": 91, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [445], "starting_column": 9, "ending_column": 100}, "type_specific_fields": {"parent": {"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18160, "length": 1341, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}}}], "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#433-455) performs a multiplication on the result of a division:\n\t- elapsedMonthsS3 = (elapsedTimeS3 * 10 ** 3) / ONE_MONTH_IN_SECONDS_S3 (contracts/src/PreMining.sol#441)\n\t- totalAvailableToClaim = (totalEligibleRewards * elapsedMonthsS3) / rewardsVestingS3 (contracts/src/PreMining.sol#445)\n", "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L433-L455) performs a multiplication on the result of a division:\n\t- [elapsedMonthsS3 = (elapsedTimeS3 * 10 ** 3) / ONE_MONTH_IN_SECONDS_S3](contracts/src/PreMining.sol#L441)\n\t- [totalAvailableToClaim = (totalEligibleRewards * elapsedMonthsS3) / rewardsVestingS3](contracts/src/PreMining.sol#L445)\n", "first_markdown_element": "contracts/src/PreMining.sol#L433-L455", "id": "4ae4ee988a25ad7832b51cd99ae8a1ebc31145dcf42ca2d5d7fddb83855df669", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)", "source_mapping": {"start": 17571, "length": 78, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [416], "starting_column": 17, "ending_column": 95}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "delete unlockRequests[unlockRequestsCursor]", "source_mapping": {"start": 17454, "length": 43, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [413], "starting_column": 17, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "unlockRequests"}}, {"type": "node", "name": "unlockRequestsCursor = processedId", "source_mapping": {"start": 17802, "length": 34, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [424], "starting_column": 9, "ending_column": 43}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "unlockRequestsCursor"}}], "description": "Reentrancy in PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425):\n\tExternal calls:\n\t- IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#416)\n\tState variables written after the call(s):\n\t- delete unlockRequests[unlockRequestsCursor] (contracts/src/PreMining.sol#413)\n\tPreMining.unlockRequests (contracts/src/PreMining.sol#112) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425)\n\t- PreMining.requestUnlock() (contracts/src/PreMining.sol#375-382)\n\t- unlockRequestsCursor = processedId (contracts/src/PreMining.sol#424)\n\tPreMining.unlockRequestsCursor (contracts/src/PreMining.sol#115) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425)\n", "markdown": "Reentrancy in [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425):\n\tExternal calls:\n\t- [IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L416)\n\tState variables written after the call(s):\n\t- [delete unlockRequests[unlockRequestsCursor]](contracts/src/PreMining.sol#L413)\n\t[PreMining.unlockRequests](contracts/src/PreMining.sol#L112) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425)\n\t- [PreMining.requestUnlock()](contracts/src/PreMining.sol#L375-L382)\n\t- [unlockRequestsCursor = processedId](contracts/src/PreMining.sol#L424)\n\t[PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L115) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425)\n", "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", "id": "fab13f604c4161d4f71a5928052b1aff41b48b7dbbe10b272265c93c6c1b1462", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "lToken.underlying().balanceOf(address(this)) < unlockAmount", "source_mapping": {"start": 17331, "length": 59, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [410], "starting_column": 21, "ending_column": 80}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425) has external calls inside a loop: lToken.underlying().balanceOf(address(this)) < unlockAmount (contracts/src/PreMining.sol#410)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425) has external calls inside a loop: [lToken.underlying().balanceOf(address(this)) < unlockAmount](contracts/src/PreMining.sol#L410)\n", "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", "id": "d0b841a27e83c26b2317a33df612f1dd04c7990827bdeaa7908e39f0ea361da1", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)", "source_mapping": {"start": 17571, "length": 78, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [416], "starting_column": 17, "ending_column": 95}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425) has external calls inside a loop: IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#416)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425) has external calls inside a loop: [IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L416)\n", "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", "id": "db40313c3eec409f2efb795c0c6f50217a5ee8a445a31178f693e04922568a17", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 8728, "length": 1131, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}, {"type": "node", "name": "require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + rewardsVestingInSecond + threeMonthsInSecond,Not enough far from rewards vesting end)", "source_mapping": {"start": 9234, "length": 192, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [229, 230, 231, 232, 233], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 8728, "length": 1131, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}}}, {"type": "node", "name": "require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + maxLockInSecond + threeMonthsInSecond,Not enough far from maximum lock end)", "source_mapping": {"start": 9604, "length": 166, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [237, 238, 239, 240], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "startRecoveryPhase", "source_mapping": {"start": 8728, "length": 1131, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "startRecoveryPhase()"}}}}], "description": "PreMining.startRecoveryPhase() (contracts/src/PreMining.sol#221-244) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + rewardsVestingInSecond + threeMonthsInSecond,Not enough far from rewards vesting end) (contracts/src/PreMining.sol#229-233)\n\t- require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + maxLockInSecond + threeMonthsInSecond,Not enough far from maximum lock end) (contracts/src/PreMining.sol#237-240)\n", "markdown": "[PreMining.startRecoveryPhase()](contracts/src/PreMining.sol#L221-L244) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + rewardsVestingInSecond + threeMonthsInSecond,Not enough far from rewards vesting end)](contracts/src/PreMining.sol#L229-L233)\n\t- [require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + maxLockInSecond + threeMonthsInSecond,Not enough far from maximum lock end)](contracts/src/PreMining.sol#L237-L240)\n", "first_markdown_element": "contracts/src/PreMining.sol#L221-L244", "id": "b8e400d0e4a17966560e52253fd7d37c546889cd8b2bfabe775d0a29d163c942", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18160, "length": 1341, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}, {"type": "node", "name": "accountsLocks[msg.sender].claimedRewards > totalAvailableToClaim", "source_mapping": {"start": 19181, "length": 64, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [449], "starting_column": 13, "ending_column": 77}, "type_specific_fields": {"parent": {"type": "function", "name": "availableToClaim", "source_mapping": {"start": 18160, "length": 1341, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "availableToClaim(address)"}}}}], "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#433-455) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsLocks[msg.sender].claimedRewards > totalAvailableToClaim (contracts/src/PreMining.sol#449)\n", "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L433-L455) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsLocks[msg.sender].claimedRewards > totalAvailableToClaim](contracts/src/PreMining.sol#L449)\n", "first_markdown_element": "contracts/src/PreMining.sol#L433-L455", "id": "ea17be9ef23480d4cb671eb6485f594da683c36623cf79991657a67db13e35f4", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}, {"type": "node", "name": "delete unlockRequests[unlockRequestsCursor]", "source_mapping": {"start": 17454, "length": 43, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [413], "starting_column": 17, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "processUnlockRequests", "source_mapping": {"start": 16277, "length": 1566, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "PreMining", "source_mapping": {"start": 1875, "length": 18205, "filename_relative": "contracts/src/PreMining.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", "filename_short": "contracts/src/PreMining.sol", "is_dependency": false, "lines": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 1, "ending_column": 2}}, "signature": "processUnlockRequests()"}}}}], "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425) has costly operations inside a loop:\n\t- delete unlockRequests[unlockRequestsCursor] (contracts/src/PreMining.sol#413)\n", "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425) has costly operations inside a loop:\n\t- [delete unlockRequests[unlockRequestsCursor]](contracts/src/PreMining.sol#L413)\n", "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", "id": "0b8d84f541b380ee02f12f6b17326bd947084eece7ac5e04402f6950bd10bff4", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11754, "length": 300, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [292, 293, 294, 295, 296, 297, 298], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}, {"type": "node", "name": "withdrawer = withdrawer_", "source_mapping": {"start": 12023, "length": 24, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [297], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11754, "length": 300, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [292, 293, 294, 295, 296, 297, 298], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}}}], "description": "OldLToken1.setWithdrawer(address) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#292-298) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#297) \n", "markdown": "[OldLToken1.setWithdrawer(address)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L292-L298) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L297) \n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L292-L298", "id": "a22396407cb8cb6167c12551674f4edeff83d18a6f812e1cb659a100323b0c5b", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFund", "source_mapping": {"start": 12187, "length": 261, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [304, 305, 306, 307, 308, 309, 310], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}, {"type": "node", "name": "fund = fund_", "source_mapping": {"start": 12429, "length": 12, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [309], "starting_column": 9, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "function", "name": "setFund", "source_mapping": {"start": 12187, "length": 261, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [304, 305, 306, 307, 308, 309, 310], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}}}], "description": "OldLToken1.setFund(address) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#304-310) should emit an event for: \n\t- fund = fund_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#309) \n", "markdown": "[OldLToken1.setFund(address)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L304-L310) should emit an event for: \n\t- [fund = fund_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L309) \n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L304-L310", "id": "34e20861921142640dd7980da834954f2b2aaddf2a1fa646696e4b7b265034f2", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10671, "length": 108, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}, {"type": "node", "name": "feesRateUD7x3 = feesRateUD7x3_", "source_mapping": {"start": 10742, "length": 30, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [266], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10671, "length": 108, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}], "description": "OldLToken1.setFeesRate(uint32) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#265-267) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#266) \n", "markdown": "[OldLToken1.setFeesRate(uint32)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L265-L267) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L266) \n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L265-L267", "id": "a19f67e42f0667f0b63b3c536f3913beeab344fe248b08c3f4721520e4e78701", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11119, "length": 201, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [275, 276, 277, 278], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}, {"type": "node", "name": "retentionRateUD7x3 = retentionRateUD7x3_", "source_mapping": {"start": 11273, "length": 40, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [277], "starting_column": 9, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11119, "length": 201, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [275, 276, 277, 278], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}], "description": "OldLToken1.setRetentionRate(uint32) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#275-278) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#277) \n", "markdown": "[OldLToken1.setRetentionRate(uint32)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L275-L278) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L277) \n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L275-L278", "id": "3f48cdfdd8cab4d7afd54cf89bad43797169f127ee5ecdec7c422758b15982f6", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24425, "length": 803, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}, {"type": "node", "name": "ldyStaking.tierOf(account) >= 2", "source_mapping": {"start": 24666, "length": 31, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [592], "starting_column": 13, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24425, "length": 803, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "OldLToken1.getWithdrawnAmountAndFees(address,uint256) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#587-605) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#592)\n", "markdown": "[OldLToken1.getWithdrawnAmountAndFees(address,uint256)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L587-L605) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L592)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L587-L605", "id": "d2de1a1a30ccb83545d2a11b47793973fbe7a5b86735b66a1a159866f55d6dc9", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "underlying().safeTransfer(request.account,withdrawnAmount)", "source_mapping": {"start": 33489, "length": 59, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [799], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", "source_mapping": {"start": 32685, "length": 262, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [781, 782, 783, 784, 785, 786, 787, 788], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#799)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#781-788)\n", "markdown": "Reentrancy in [OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L799)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L781-L788)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", "id": "42600a5ce08ef0da606bdfbc59477b0ec1ca4fdb95a740e2334e1931ca7e04e7", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31270, "length": 37, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [749], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#749)\n", "markdown": "[OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L749)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", "id": "f9aeeacfcf456855d5c6f089564c96d7a5d543397d0833110325d0ac1e902215", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31756, "length": 37, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [759], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#759)\n", "markdown": "[OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L759)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", "id": "ba6b2d728b6dd87794875886145677ecd11a7fd480c0b5096ce520dc1128778e", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 33011, "length": 37, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [791], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29833, "length": 4535, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#791)\n", "markdown": "[OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L791)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", "id": "00f2b9a34b80d75b8f5b6abe48b2e70a60860977357b763ce9d8341dbc70937f", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27707, "length": 1876, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 29493, "length": 53, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [713], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27707, "length": 1876, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in OldLToken1.requestWithdrawal(uint256) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#662-715):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#713)\n", "markdown": "Low level call in [OldLToken1.requestWithdrawal(uint256)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L662-L715):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L713)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L662-L715", "id": "96835e689272286e020faa3bfb055f8fe2d5da9110a6fa5c5c4bdeb5125170a8", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "MAX_RETENTION_RATE_UD7x3", "source_mapping": {"start": 3796, "length": 63, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [84], "starting_column": 5, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant OldLToken1.MAX_RETENTION_RATE_UD7x3 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#84) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [OldLToken1.MAX_RETENTION_RATE_UD7x3](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L84) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L84", "id": "2f5390adfa95e3f9ab0ee72044c365cddcb0d69c6cf45302bf3174c35cfaa280", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 22810, "length": 7, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [544], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22711, "length": 196, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [543, 544, 545, 546, 547], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#544)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", "markdown": "Redundant expression \"[account](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L544)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L544", "id": "69a7609454115d344ccee5e1a4e7d54ed21845c4e83c0b423d5bb1835c6fe1a3", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 22871, "length": 6, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [545], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22711, "length": 196, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [543, 544, 545, 546, 547], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#545)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", "markdown": "Redundant expression \"[amount](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L545)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L545", "id": "cdae2e45851369855ef99f75d258bd2c45a60cc25c56d8f6b35ee1a7877db86a", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 23188, "length": 7, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [555], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23089, "length": 196, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [554, 555, 556, 557, 558], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#555)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", "markdown": "Redundant expression \"[account](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L555)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L555", "id": "d042f96aced291513cf8e59f20cc4650491624b09914a1fbdc058e08f1c36d10", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 23249, "length": 6, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [556], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23089, "length": 196, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [554, 555, 556, 557, 558], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "OldLToken1", "source_mapping": {"start": 2930, "length": 37460, "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#556)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", "markdown": "Redundant expression \"[amount](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L556)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L556", "id": "af0571f30581025a2c62cbe9de94c2a4af3a2a7e2455cd976fd7f59ad08c0fb7", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11863, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [295, 296, 297, 298, 299, 300, 301], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}, {"type": "node", "name": "withdrawer = withdrawer_", "source_mapping": {"start": 12132, "length": 24, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [300], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11863, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [295, 296, 297, 298, 299, 300, 301], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}}}], "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#295-301) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#300) \n", "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L295-L301) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L300) \n", "first_markdown_element": "contracts/src/LToken.sol#L295-L301", "id": "69662eae3ce23698b8f37d5c66f42cb4d8b24e4df17466211ad3dbaba6765dcb", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFund", "source_mapping": {"start": 12296, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [307, 308, 309, 310, 311, 312, 313], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}, {"type": "node", "name": "fund = fund_", "source_mapping": {"start": 12538, "length": 12, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [312], "starting_column": 9, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "function", "name": "setFund", "source_mapping": {"start": 12296, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [307, 308, 309, 310, 311, 312, 313], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}}}], "description": "LToken.setFund(address) (contracts/src/LToken.sol#307-313) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#312) \n", "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L307-L313) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L312) \n", "first_markdown_element": "contracts/src/LToken.sol#L307-L313", "id": "3ad594589ec5dee05e1692584f0b5edc54ba72863733875f51972275e630bb2b", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10780, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}, {"type": "node", "name": "feesRateUD7x3 = feesRateUD7x3_", "source_mapping": {"start": 10851, "length": 30, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [269], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10780, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [268, 269, 270], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}], "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#268-270) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#269) \n", "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L268-L270) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L269) \n", "first_markdown_element": "contracts/src/LToken.sol#L268-L270", "id": "39510cdd4bee3e732324ba935dc6ee429e4da1131002bdacdda116dbea792c0e", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11228, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [278, 279, 280, 281], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}, {"type": "node", "name": "retentionRateUD7x3 = retentionRateUD7x3_", "source_mapping": {"start": 11382, "length": 40, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [280], "starting_column": 9, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11228, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [278, 279, 280, 281], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}], "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#278-281) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#280) \n", "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L278-L281) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L280) \n", "first_markdown_element": "contracts/src/LToken.sol#L278-L281", "id": "97deb04145d8f767222759ec2b1c8d9eeeee3e6750b28816eebc7eedb223175d", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24635, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}, {"type": "node", "name": "ldyStaking.tierOf(account) >= 2", "source_mapping": {"start": 24876, "length": 31, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [603], "starting_column": 13, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24635, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#598-616) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#603)\n", "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L598-L616) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L603)\n", "first_markdown_element": "contracts/src/LToken.sol#L598-L616", "id": "12e2e84178ca6125a5405faf01d1d2806b087a70cab1a9e0a794f4e7e43d7194", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "underlying().safeTransfer(request.account,withdrawnAmount)", "source_mapping": {"start": 34186, "length": 59, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [824], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))", "source_mapping": {"start": 32054, "length": 308, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [772, 773, 774, 775, 776, 777, 778, 779, 780], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)", "source_mapping": {"start": 33355, "length": 289, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [805, 806, 807, 808, 809, 810, 811, 812, 813], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#824)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length)) (contracts/src/LToken.sol#772-780)\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID) (contracts/src/LToken.sol#805-813)\n", "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L824)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))](contracts/src/LToken.sol#L772-L780)\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)](contracts/src/LToken.sol#L805-L813)\n", "first_markdown_element": "contracts/src/LToken.sol#L735-L846", "id": "d50d58878c4490cbb6422f63b619c954e82bc6df869bf3af7050efed4bc871bd", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31518, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [762], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#762)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L762)\n", "first_markdown_element": "contracts/src/LToken.sol#L735-L846", "id": "eeb3ee2ec346674d6e8e347dd0bc3ef0f1fa8ce4eafd3dc8bb6eae5738d716d1", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 32426, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [783], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#783)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L783)\n", "first_markdown_element": "contracts/src/LToken.sol#L735-L846", "id": "966f20f807cc0f0ccb0d21053da246cb80a15c3cf4e1ebc67c7762299960d4a2", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 33708, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [816], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 30081, "length": 4984, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#816)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L816)\n", "first_markdown_element": "contracts/src/LToken.sol#L735-L846", "id": "2978397b0b0238caedb623a690c91ba4e460fdd042c77f8f23471f8f646f091c", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27936, "length": 1895, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 29741, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [726], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27936, "length": 1895, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#674-728):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#726)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L674-L728):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L726)\n", "first_markdown_element": "contracts/src/LToken.sol#L674-L728", "id": "6f227c0b8fed1dd452cdc25be3dfc52800c766be6dff3845b1f468552183a0f5", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 22919, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [547], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22820, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [546, 547, 548, 549, 550], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#547)\" inLToken (contracts/src/LToken.sol#56-1002)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L547)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", "first_markdown_element": "contracts/src/LToken.sol#L547", "id": "c801a30fb3294caf1aea7a38cb98dce5ba83bffe3c349ee13f4d1ef6f6ca26eb", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 22980, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [548], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22820, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [546, 547, 548, 549, 550], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#548)\" inLToken (contracts/src/LToken.sol#56-1002)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L548)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", "first_markdown_element": "contracts/src/LToken.sol#L548", "id": "f5c48fbf1702b5c6523ad2f58ad2bb95602cdb6d8beb66e65fff5c2d7352cfbd", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 23297, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [558], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23198, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [557, 558, 559, 560, 561], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#558)\" inLToken (contracts/src/LToken.sol#56-1002)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L558)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", "first_markdown_element": "contracts/src/LToken.sol#L558", "id": "7cbe2da74b349ac581e0fc3590a4420db94d11243212ce46a375b6eaa3f71173", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 23358, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [559], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23198, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [557, 558, 559, 560, 561], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 38200, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#559)\" inLToken (contracts/src/LToken.sol#56-1002)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L559)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", "first_markdown_element": "contracts/src/LToken.sol#L559", "id": "cd3d58371bc24707adfe231f58854837101da3426577b3069746b5d5e273970b", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10589, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)", "source_mapping": {"start": 11022, "length": 89, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [270], "starting_column": 9, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10589, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", "source_mapping": {"start": 11243, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [274], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10589, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#259-280) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d) (contracts/src/abstracts/InvestUpgradeable.sol#270)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#274)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L259-L280) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)](contracts/src/abstracts/InvestUpgradeable.sol#L270)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L274)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L259-L280", "id": "09ce4960c5eb4c414974ac65ceb89dbafe8dfe1459df42916c4957bc11398d39", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10589, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", "source_mapping": {"start": 11243, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [274], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10589, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)", "source_mapping": {"start": 11433, "length": 74, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [278], "starting_column": 9, "ending_column": 83}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10589, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#259-280) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#274)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d) (contracts/src/abstracts/InvestUpgradeable.sol#278)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L259-L280) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L274)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)](contracts/src/abstracts/InvestUpgradeable.sol#L278)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L259-L280", "id": "c5e155c1aef8b5ff3782a92144d2c54d0e5ba92c526ec17b230648af5e648759", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17821, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18388, "length": 68, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [418], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17821, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#410-445) uses a dangerous strict equality:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#418)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L410-L445) uses a dangerous strict equality:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L418)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L410-L445", "id": "533b6f11b9abd215ea9359ff40c1acc86274c66f96a6512dc49ae3b583aaf9da", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_isClaiming", "source_mapping": {"start": 3874, "length": 24, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [89], "starting_column": 5, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}}}, {"type": "node", "name": "_isClaiming = true", "source_mapping": {"start": 19125, "length": 18, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [435], "starting_column": 13, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17821, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}, {"type": "node", "name": "_isClaiming = false", "source_mapping": {"start": 19226, "length": 19, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [437], "starting_column": 13, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17821, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#89) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#435)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#437)\n", "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L89) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L435)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L437)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L89", "id": "7d51fd10545d0e90cee32608f7777188a0448965ef7f7d30713a301896324bad", "check": "write-after-write", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11745, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [292, 293, 294, 295, 296, 297, 298], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}, {"type": "node", "name": "withdrawer = withdrawer_", "source_mapping": {"start": 12014, "length": 24, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [297], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11745, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [292, 293, 294, 295, 296, 297, 298], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}}}], "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#292-298) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#297) \n", "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L292-L298) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L297) \n", "first_markdown_element": "contracts/src/LToken.sol#L292-L298", "id": "ec3aab1de8dab8070b47e183c694051e49bc5a2478e75e36fc8f11f9b5b41044", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFund", "source_mapping": {"start": 12178, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [304, 305, 306, 307, 308, 309, 310], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}, {"type": "node", "name": "fund = fund_", "source_mapping": {"start": 12420, "length": 12, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [309], "starting_column": 9, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "function", "name": "setFund", "source_mapping": {"start": 12178, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [304, 305, 306, 307, 308, 309, 310], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}}}], "description": "LToken.setFund(address) (contracts/src/LToken.sol#304-310) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#309) \n", "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L304-L310) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L309) \n", "first_markdown_element": "contracts/src/LToken.sol#L304-L310", "id": "80b61aecbde66907228c0799264d05dca5dd52a141faecfe9bda8b813b971ded", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10662, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}, {"type": "node", "name": "feesRateUD7x3 = feesRateUD7x3_", "source_mapping": {"start": 10733, "length": 30, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [266], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10662, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [265, 266, 267], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}], "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#265-267) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#266) \n", "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L265-L267) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L266) \n", "first_markdown_element": "contracts/src/LToken.sol#L265-L267", "id": "285dcf1d2e0697b40955e354766b38861d66ce8aa3bcef41c178f67d56e7c76d", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11110, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [275, 276, 277, 278], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}, {"type": "node", "name": "retentionRateUD7x3 = retentionRateUD7x3_", "source_mapping": {"start": 11264, "length": 40, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [277], "starting_column": 9, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 11110, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [275, 276, 277, 278], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}], "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#275-278) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#277) \n", "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L275-L278) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L277) \n", "first_markdown_element": "contracts/src/LToken.sol#L275-L278", "id": "41d82b6925bf8767117a3feda5dd2e8e13be7b7fe11838b3846e51a9b13cdddf", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24416, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}, {"type": "node", "name": "ldyStaking.tierOf(account) >= 2", "source_mapping": {"start": 24657, "length": 31, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [592], "starting_column": 13, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24416, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#587-605) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#592)\n", "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L587-L605) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L592)\n", "first_markdown_element": "contracts/src/LToken.sol#L587-L605", "id": "3014f302ce354b3b91599b91c9735709c58b7fc4bf436e8ce3868f5e1f358f31", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "underlying().safeTransfer(request.account,withdrawnAmount)", "source_mapping": {"start": 33480, "length": 59, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [799], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", "source_mapping": {"start": 32676, "length": 262, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [781, 782, 783, 784, 785, 786, 787, 788], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#799)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/LToken.sol#781-788)\n", "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L799)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/LToken.sol#L781-L788)\n", "first_markdown_element": "contracts/src/LToken.sol#L722-L821", "id": "c33c152baf16f394b46ccf273618e73c686a23a6561dc4f2f01bf964aa969b2c", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17821, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18388, "length": 68, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [418], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17821, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#410-445) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#418)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L410-L445) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L418)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L410-L445", "id": "c40694987242a5c8b669f2d66c4bd30e976c471e6d0da092c53ef7e5f3f2fb24", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31261, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [749], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#749)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L749)\n", "first_markdown_element": "contracts/src/LToken.sol#L722-L821", "id": "cda318f17cbe329788fb9b7d21a1192a3f8d45ac824e5df063eecdf8718269bb", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31747, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [759], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#759)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L759)\n", "first_markdown_element": "contracts/src/LToken.sol#L722-L821", "id": "32eb76d34086fc56cecc7e3f3ab9c48e19b99178b0779f06b58a7917a79df1aa", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 33002, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [791], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29824, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#791)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L791)\n", "first_markdown_element": "contracts/src/LToken.sol#L722-L821", "id": "fb259faf9ca1f4cc709f2353784487e3ebe34620e0e17e3064025c76142a91db", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27698, "length": 1876, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 29484, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [713], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27698, "length": 1876, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#662-715):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#713)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L662-L715):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L713)\n", "first_markdown_element": "contracts/src/LToken.sol#L662-L715", "id": "836a94c939fc40a13037c015d86014baebc51354edc3839d0ac71583524b09c6", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 22801, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [544], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22702, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [543, 544, 545, 546, 547], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#544)\" inLToken (contracts/src/LToken.sol#56-975)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L544)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", "first_markdown_element": "contracts/src/LToken.sol#L544", "id": "b06580630fe57948ca3b60b159c54106c824a947f6b50ec171cd5cbb0f50dfae", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 22862, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [545], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22702, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [543, 544, 545, 546, 547], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#545)\" inLToken (contracts/src/LToken.sol#56-975)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L545)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", "first_markdown_element": "contracts/src/LToken.sol#L545", "id": "a7fda804628aaf599ca767beef7f077e295bc8b1a2aff2d858b4c69961840aff", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 23179, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [555], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23080, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [554, 555, 556, 557, 558], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#555)\" inLToken (contracts/src/LToken.sol#56-975)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L555)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", "first_markdown_element": "contracts/src/LToken.sol#L555", "id": "101a0b5349aa851ff048602d60a91c749268773dd50144a9f64cd17f958b3a80", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 23240, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [556], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 23080, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [554, 555, 556, 557, 558], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37456, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#556)\" inLToken (contracts/src/LToken.sol#56-975)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L556)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", "first_markdown_element": "contracts/src/LToken.sol#L556", "id": "8dab9f0a7e40e852a59f44fabe4c6224a26caae0d41c3831e9503ad13f031edc", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 9886, "length": 7, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [243], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9783, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [242, 243, 244, 245, 246], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#243)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-453)\n", "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L243)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L453)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L243", "id": "e328f3bc9613ac4d19eacba9569b8a19cf1f90b3c3a5ff56bd83fae86b379eb5", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 9939, "length": 6, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [244], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9783, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [242, 243, 244, 245, 246], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17466, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#244)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-453)\n", "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L244)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L453)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L244", "id": "c9456de19b5b90645c1f912ae306cf0a405e100c453596be3cb542c41f5a00f2", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "underlying().safeTransfer(request.account,withdrawnAmount)", "source_mapping": {"start": 33302, "length": 59, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [798], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", "source_mapping": {"start": 32498, "length": 262, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [780, 781, 782, 783, 784, 785, 786, 787], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#798)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/LToken.sol#780-787)\n", "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L798)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/LToken.sol#L780-L787)\n", "first_markdown_element": "contracts/src/LToken.sol#L721-L820", "id": "a00075235875a398a2ba50289c1720384eb04b020fa085968f7b0ce81eea7619", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "isBlacklisted", "source_mapping": {"start": 2553, "length": 132, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 872, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77], "starting_column": 1, "ending_column": 2}}, "signature": "isBlacklisted(address)"}}, {"type": "node", "name": "_globalBlacklist.isBlacklisted(account)", "source_mapping": {"start": 2632, "length": 46, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [68], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "isBlacklisted", "source_mapping": {"start": 2553, "length": 132, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [67, 68, 69], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 872, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77], "starting_column": 1, "ending_column": 2}}, "signature": "isBlacklisted(address)"}}}}], "description": "GlobalRestrictableUpgradeable.isBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#67-69) has external calls inside a loop: _globalBlacklist.isBlacklisted(account) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#68)\n", "markdown": "[GlobalRestrictableUpgradeable.isBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67-L69) has external calls inside a loop: [_globalBlacklist.isBlacklisted(account)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L68)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67-L69", "id": "b68d23942f819da7602ac907b999a603d73a549609bb37227c8a6d8813e5ef8c", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "decimalsOf", "source_mapping": {"start": 4165, "length": 157, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [81, 82, 83], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "SUD", "source_mapping": {"start": 3899, "length": 3844, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 1, "ending_column": 2}}, "signature": "decimalsOf(address)"}}, {"type": "node", "name": "IERC20MetadataUpgradeable(tokenAddress).decimals()", "source_mapping": {"start": 4258, "length": 57, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [82], "starting_column": 9, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "decimalsOf", "source_mapping": {"start": 4165, "length": 157, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [81, 82, 83], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "SUD", "source_mapping": {"start": 3899, "length": 3844, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 1, "ending_column": 2}}, "signature": "decimalsOf(address)"}}}}], "description": "SUD.decimalsOf(address) (contracts/src/libs/SUD.sol#81-83) has external calls inside a loop: IERC20MetadataUpgradeable(tokenAddress).decimals() (contracts/src/libs/SUD.sol#82)\n", "markdown": "[SUD.decimalsOf(address)](contracts/src/libs/SUD.sol#L81-L83) has external calls inside a loop: [IERC20MetadataUpgradeable(tokenAddress).decimals()](contracts/src/libs/SUD.sol#L82)\n", "first_markdown_element": "contracts/src/libs/SUD.sol#L81-L83", "id": "d5194ea473e87b18afb6b443c345a2dd76b0cda2e1041a12d75921a207c34bed", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24238, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}, {"type": "node", "name": "ldyStaking.tierOf(account) >= 2", "source_mapping": {"start": 24479, "length": 31, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [591], "starting_column": 13, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 24238, "length": 803, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#586-604) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#591)\n", "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L586-L604) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L591)\n", "first_markdown_element": "contracts/src/LToken.sol#L586-L604", "id": "d497539f193bd1f2cf9a8152879dc1b3165b72640a24062050438a5e6d133f0f", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10404, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)", "source_mapping": {"start": 10837, "length": 89, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [265], "starting_column": 9, "ending_column": 98}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10404, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", "source_mapping": {"start": 11058, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [269], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10404, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#254-275) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d) (contracts/src/abstracts/InvestUpgradeable.sol#265)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#269)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L254-L275) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)](contracts/src/abstracts/InvestUpgradeable.sol#L265)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L269)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L254-L275", "id": "1d2f36e807348b9f41fec5cd93e60964469b0fc66c23a3ef3c01502ced5efb8e", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10404, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", "source_mapping": {"start": 11058, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [269], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10404, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)", "source_mapping": {"start": 11248, "length": 74, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [273], "starting_column": 9, "ending_column": 83}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10404, "length": 969, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#254-275) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#269)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d) (contracts/src/abstracts/InvestUpgradeable.sol#273)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L254-L275) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L269)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)](contracts/src/abstracts/InvestUpgradeable.sol#L273)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L254-L275", "id": "cd14cad6ad9e2d59c245a27936678ee82b57115310e0300f16d2deb8ccd9e4bc", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}, {"type": "node", "name": "growthRateSUD = (addedAmountSUD * SUD.fromInt(100,18)) / accountStakeSUD", "source_mapping": {"start": 7664, "length": 81, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [185], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "lockDurationIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / SUD.fromInt(100,18)", "source_mapping": {"start": 7829, "length": 107, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [188, 189], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}], "description": "WIP_LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/dev/LDYStaking.sol#169-212) performs a multiplication on the result of a division:\n\t- growthRateSUD = (addedAmountSUD * SUD.fromInt(100,18)) / accountStakeSUD (contracts/src/dev/LDYStaking.sol#185)\n\t- lockDurationIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / SUD.fromInt(100,18) (contracts/src/dev/LDYStaking.sol#188-189)\n", "markdown": "[WIP_LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/dev/LDYStaking.sol#L169-L212) performs a multiplication on the result of a division:\n\t- [growthRateSUD = (addedAmountSUD * SUD.fromInt(100,18)) / accountStakeSUD](contracts/src/dev/LDYStaking.sol#L185)\n\t- [lockDurationIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / SUD.fromInt(100,18)](contracts/src/dev/LDYStaking.sol#L188-L189)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L169-L212", "id": "64740a45b8e6371c48dfdbec99c5af372e723343018731a180e80749c7548368", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17636, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18203, "length": 68, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [413], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17636, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#405-440) uses a dangerous strict equality:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#413)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L405-L440) uses a dangerous strict equality:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L413)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L405-L440", "id": "dc7b0d492e427b4f16ac1d6d21755162da310676669e99e6cdd323aaf9c7143d", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}, {"type": "node", "name": "accountStake.amount == 0", "source_mapping": {"start": 7270, "length": 24, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [177], "starting_column": 13, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}], "description": "WIP_LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/dev/LDYStaking.sol#169-212) uses a dangerous strict equality:\n\t- accountStake.amount == 0 (contracts/src/dev/LDYStaking.sol#177)\n", "markdown": "[WIP_LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/dev/LDYStaking.sol#L169-L212) uses a dangerous strict equality:\n\t- [accountStake.amount == 0](contracts/src/dev/LDYStaking.sol#L177)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L169-L212", "id": "295fe3b4c7566bcfae2e2ab16d451726e7bd20d9fec6fba33ebd37307083da93", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_isClaiming", "source_mapping": {"start": 3874, "length": 24, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [89], "starting_column": 5, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}}}, {"type": "node", "name": "_isClaiming = true", "source_mapping": {"start": 18940, "length": 18, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [430], "starting_column": 13, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17636, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}, {"type": "node", "name": "_isClaiming = false", "source_mapping": {"start": 19041, "length": 19, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [432], "starting_column": 13, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17636, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#89) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#430)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#432)\n", "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L89) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L430)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L432)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L89", "id": "97001dbcb6e8ee671b3308eeea0c177549df0d7bd78ae49c59042d1054eda549", "check": "write-after-write", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11567, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [291, 292, 293, 294, 295, 296, 297], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}, {"type": "node", "name": "withdrawer = withdrawer_", "source_mapping": {"start": 11836, "length": 24, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [296], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 11567, "length": 300, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [291, 292, 293, 294, 295, 296, 297], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}}}], "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#291-297) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#296) \n", "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L291-L297) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L296) \n", "first_markdown_element": "contracts/src/LToken.sol#L291-L297", "id": "b2d064185c68f4d4863c83e6d6f24ed937530e77050e04a669cbceb3a5a99dda", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFund", "source_mapping": {"start": 12000, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [303, 304, 305, 306, 307, 308, 309], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}, {"type": "node", "name": "fund = fund_", "source_mapping": {"start": 12242, "length": 12, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [308], "starting_column": 9, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "function", "name": "setFund", "source_mapping": {"start": 12000, "length": 261, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [303, 304, 305, 306, 307, 308, 309], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}}}], "description": "LToken.setFund(address) (contracts/src/LToken.sol#303-309) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#308) \n", "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L303-L309) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L308) \n", "first_markdown_element": "contracts/src/LToken.sol#L303-L309", "id": "685c7bc65a988d2ea6eeb76c80a8f01e9a89eb8966e24cf6f9e68c44b6e8568a", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10484, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [264, 265, 266], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}, {"type": "node", "name": "feesRateUD7x3 = feesRateUD7x3_", "source_mapping": {"start": 10555, "length": 30, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [265], "starting_column": 9, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 10484, "length": 108, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [264, 265, 266], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}], "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#264-266) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#265) \n", "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L264-L266) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L265) \n", "first_markdown_element": "contracts/src/LToken.sol#L264-L266", "id": "49c09b6205923501046668d773d3cff6f5274e24c7a39c8bf815885ee49f4527", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 10932, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [274, 275, 276, 277], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}, {"type": "node", "name": "retentionRateUD7x3 = retentionRateUD7x3_", "source_mapping": {"start": 11086, "length": 40, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [276], "starting_column": 9, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 10932, "length": 201, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [274, 275, 276, 277], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}], "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#274-277) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#276) \n", "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L274-L277) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L276) \n", "first_markdown_element": "contracts/src/LToken.sol#L274-L277", "id": "b27a65f5281f8e6da3636594c0058be9c8f51168dcfbf9b3b35b07f59471c4b9", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setUnlockFeesRate", "source_mapping": {"start": 9697, "length": 132, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [228, 229, 230], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "setUnlockFeesRate(uint32)"}}, {"type": "node", "name": "unlockFeesRateUD7x3 = unlockFeesRateUD7x3_", "source_mapping": {"start": 9780, "length": 42, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [229], "starting_column": 9, "ending_column": 51}, "type_specific_fields": {"parent": {"type": "function", "name": "setUnlockFeesRate", "source_mapping": {"start": 9697, "length": 132, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [228, 229, 230], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "setUnlockFeesRate(uint32)"}}}}], "description": "WIP_LDYStaking.setUnlockFeesRate(uint32) (contracts/src/dev/LDYStaking.sol#228-230) should emit an event for: \n\t- unlockFeesRateUD7x3 = unlockFeesRateUD7x3_ (contracts/src/dev/LDYStaking.sol#229) \n", "markdown": "[WIP_LDYStaking.setUnlockFeesRate(uint32)](contracts/src/dev/LDYStaking.sol#L228-L230) should emit an event for: \n\t- [unlockFeesRateUD7x3 = unlockFeesRateUD7x3_](contracts/src/dev/LDYStaking.sol#L229) \n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L228-L230", "id": "cc2b3d3af6fd6516bbd5e2cb2e466fc24f9418562cb80ea3eb8b9b012d0837eb", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setStakeLockDuration", "source_mapping": {"start": 9982, "length": 129, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [236, 237, 238], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "setStakeLockDuration(uint40)"}}, {"type": "node", "name": "stakeLockDuration = stakeLockDuration_", "source_mapping": {"start": 10066, "length": 38, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [237], "starting_column": 9, "ending_column": 47}, "type_specific_fields": {"parent": {"type": "function", "name": "setStakeLockDuration", "source_mapping": {"start": 9982, "length": 129, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [236, 237, 238], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "setStakeLockDuration(uint40)"}}}}], "description": "WIP_LDYStaking.setStakeLockDuration(uint40) (contracts/src/dev/LDYStaking.sol#236-238) should emit an event for: \n\t- stakeLockDuration = stakeLockDuration_ (contracts/src/dev/LDYStaking.sol#237) \n", "markdown": "[WIP_LDYStaking.setStakeLockDuration(uint40)](contracts/src/dev/LDYStaking.sol#L236-L238) should emit an event for: \n\t- [stakeLockDuration = stakeLockDuration_](contracts/src/dev/LDYStaking.sol#L237) \n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L236-L238", "id": "963fd008326cfdfdc9aa3edfbb2216ec7947202c318cb01deca100023787d04d", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "fuel", "source_mapping": {"start": 10272, "length": 348, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "fuel(uint256)"}}, {"type": "node", "name": "rewardsReserve += amount", "source_mapping": {"start": 10449, "length": 24, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [249], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "fuel", "source_mapping": {"start": 10272, "length": 348, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "fuel(uint256)"}}}}], "description": "WIP_LDYStaking.fuel(uint256) (contracts/src/dev/LDYStaking.sol#244-253) should emit an event for: \n\t- rewardsReserve += amount (contracts/src/dev/LDYStaking.sol#249) \n", "markdown": "[WIP_LDYStaking.fuel(uint256)](contracts/src/dev/LDYStaking.sol#L244-L253) should emit an event for: \n\t- [rewardsReserve += amount](contracts/src/dev/LDYStaking.sol#L249) \n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L244-L253", "id": "50f30fa0584b6b97e798b97091706b2455cf3ded90b97b834f4572283d2328a9", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17636, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18203, "length": 68, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [413], "starting_column": 13, "ending_column": 81}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17636, "length": 1735, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#405-440) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#413)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L405-L440) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L413)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L405-L440", "id": "88a1c33b8569a50b9337d9a441eab0ce41dcaa1ea214f76a2e7df864450ce6d8", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}, {"type": "node", "name": "accountStake.amount == 0", "source_mapping": {"start": 7270, "length": 24, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [177], "starting_column": 13, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "_lockDurationIncrease > type()(uint40).max", "source_mapping": {"start": 8163, "length": 138, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [194, 195, 196], "starting_column": 9, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "accountStake.lockEnd < uint40(block.timestamp)", "source_mapping": {"start": 8450, "length": 154, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [200, 201, 202], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "lockDurationsSum > stakeLockDuration", "source_mapping": {"start": 8901, "length": 150, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [209, 210, 211], "starting_column": 9, "ending_column": 35}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6922, "length": 2136, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}], "description": "WIP_LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/dev/LDYStaking.sol#169-212) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountStake.amount == 0 (contracts/src/dev/LDYStaking.sol#177)\n\t- _lockDurationIncrease > type()(uint40).max (contracts/src/dev/LDYStaking.sol#194-196)\n\t- accountStake.lockEnd < uint40(block.timestamp) (contracts/src/dev/LDYStaking.sol#200-202)\n\t- lockDurationsSum > stakeLockDuration (contracts/src/dev/LDYStaking.sol#209-211)\n", "markdown": "[WIP_LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/dev/LDYStaking.sol#L169-L212) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountStake.amount == 0](contracts/src/dev/LDYStaking.sol#L177)\n\t- [_lockDurationIncrease > type()(uint40).max](contracts/src/dev/LDYStaking.sol#L194-L196)\n\t- [accountStake.lockEnd < uint40(block.timestamp)](contracts/src/dev/LDYStaking.sol#L200-L202)\n\t- [lockDurationsSum > stakeLockDuration](contracts/src/dev/LDYStaking.sol#L209-L211)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L169-L212", "id": "e66d5e1c87f75006040c84a440a12a8ec82422c38410002bbedde371e451fda0", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "unlock", "source_mapping": {"start": 10831, "length": 1015, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}, {"type": "node", "name": "require(bool,string)(accountStake.lockEnd > block.timestamp,L24)", "source_mapping": {"start": 11074, "length": 54, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [265], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "unlock", "source_mapping": {"start": 10831, "length": 1015, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}}}], "description": "WIP_LDYStaking.unlock() (contracts/src/dev/LDYStaking.sol#260-284) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(accountStake.lockEnd > block.timestamp,L24) (contracts/src/dev/LDYStaking.sol#265)\n", "markdown": "[WIP_LDYStaking.unlock()](contracts/src/dev/LDYStaking.sol#L260-L284) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(accountStake.lockEnd > block.timestamp,L24)](contracts/src/dev/LDYStaking.sol#L265)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L260-L284", "id": "0a4531cc6a1359ecd2bcd1f84c4ec86a21cf2ef415b66c13a341d3adb6344b6c", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "unstake", "source_mapping": {"start": 13275, "length": 1095, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}, {"type": "node", "name": "require(bool,string)(stakeOf(_msgSender()) >= amount,L28)", "source_mapping": {"start": 13509, "length": 47, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [329], "starting_column": 9, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "unstake", "source_mapping": {"start": 13275, "length": 1095, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}}}, {"type": "node", "name": "require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)", "source_mapping": {"start": 13733, "length": 55, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [335], "starting_column": 9, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "unstake", "source_mapping": {"start": 13275, "length": 1095, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}}}], "description": "WIP_LDYStaking.unstake(uint216) (contracts/src/dev/LDYStaking.sol#324-352) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(stakeOf(_msgSender()) >= amount,L28) (contracts/src/dev/LDYStaking.sol#329)\n\t- require(bool,string)(accountStake.lockEnd <= block.timestamp,L29) (contracts/src/dev/LDYStaking.sol#335)\n", "markdown": "[WIP_LDYStaking.unstake(uint216)](contracts/src/dev/LDYStaking.sol#L324-L352) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(stakeOf(_msgSender()) >= amount,L28)](contracts/src/dev/LDYStaking.sol#L329)\n\t- [require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)](contracts/src/dev/LDYStaking.sol#L335)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L324-L352", "id": "638304566b3df44b85610010d2cfa582d247f2cde995898964289b33e3985d64", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "tierOf", "source_mapping": {"start": 18925, "length": 564, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}, {"type": "node", "name": "_tiers.length < 1 || stakedAmount < getTier(1)", "source_mapping": {"start": 19168, "length": 46, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [479], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 18925, "length": 564, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}, {"type": "node", "name": "tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)", "source_mapping": {"start": 19412, "length": 62, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [485], "starting_column": 16, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 18925, "length": 564, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}], "description": "WIP_LDYStaking.tierOf(address) (contracts/src/dev/LDYStaking.sol#474-486) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _tiers.length < 1 || stakedAmount < getTier(1) (contracts/src/dev/LDYStaking.sol#479)\n\t- tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1) (contracts/src/dev/LDYStaking.sol#485)\n", "markdown": "[WIP_LDYStaking.tierOf(address)](contracts/src/dev/LDYStaking.sol#L474-L486) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [_tiers.length < 1 || stakedAmount < getTier(1)](contracts/src/dev/LDYStaking.sol#L479)\n\t- [tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)](contracts/src/dev/LDYStaking.sol#L485)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L474-L486", "id": "310044de4d7f2dd7af791b99a13a2eb5c79282d41bfe1c81d2c755e61c44a3ac", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "notBlacklisted", "source_mapping": {"start": 2233, "length": 115, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [57, 58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 872, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77], "starting_column": 1, "ending_column": 2}}, "signature": "notBlacklisted(address)"}}, {"type": "node", "name": "require(bool,string)(isBlacklisted(account) == false,L9)", "source_mapping": {"start": 2284, "length": 46, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [58], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "notBlacklisted", "source_mapping": {"start": 2233, "length": 115, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [57, 58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 872, "length": 2106, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77], "starting_column": 1, "ending_column": 2}}, "signature": "notBlacklisted(address)"}}}}], "description": "GlobalRestrictableUpgradeable.notBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#57-60) compares to a boolean constant:\n\t-require(bool,string)(isBlacklisted(account) == false,L9) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#58)\n", "markdown": "[GlobalRestrictableUpgradeable.notBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L57-L60) compares to a boolean constant:\n\t-[require(bool,string)(isBlacklisted(account) == false,L9)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L57-L60", "id": "3ef58163b2d398a5db7307389644ededccc07ee4344b1a82fb6ba4afd7e9e020", "check": "boolean-equal", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31083, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [748], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#748)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L748)\n", "first_markdown_element": "contracts/src/LToken.sol#L721-L820", "id": "60b39ec7acc7601520519cb502cdd7b59d228895d023787d8c7bf783423f2f84", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 31569, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [758], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#758)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L758)\n", "first_markdown_element": "contracts/src/LToken.sol#L721-L820", "id": "44c96ebce2a3c704283a9fb2f1fb9606fb514cfdd5d33c15c830059885787071", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 32824, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [790], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 29646, "length": 4535, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#790)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L790)\n", "first_markdown_element": "contracts/src/LToken.sol#L721-L820", "id": "d217ad8a86a8319b1bc8d2d260b93c53bee52011b5104689266910aa85e55b9d", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "toRate", "source_mapping": {"start": 6296, "length": 318, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [133, 134, 135, 136, 137, 138, 139], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "SUD", "source_mapping": {"start": 3899, "length": 3844, "filename_relative": "contracts/src/libs/SUD.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", "filename_short": "contracts/src/libs/SUD.sol", "is_dependency": false, "lines": [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168], "starting_column": 1, "ending_column": 2}}, "signature": "toRate(uint256,uint256)"}}], "description": "SUD.toRate(uint256,uint256) (contracts/src/libs/SUD.sol#133-139) is never used and should be removed\n", "markdown": "[SUD.toRate(uint256,uint256)](contracts/src/libs/SUD.sol#L133-L139) is never used and should be removed\n", "first_markdown_element": "contracts/src/libs/SUD.sol#L133-L139", "id": "36a48f95f9b7c5fe1b49f7b728d4d36d158a8314fbd9a2723a79c915b79c17a6", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27520, "length": 1876, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 29306, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [712], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 27520, "length": 1876, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#661-714):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#712)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L661-L714):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L712)\n", "first_markdown_element": "contracts/src/LToken.sol#L661-L714", "id": "5da8691e2be78c683a9175ced74af96bd9f04869096ffa8369a1066b2c6032ad", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "MAX_RETENTION_RATE_UD7x3", "source_mapping": {"start": 3787, "length": 63, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [84], "starting_column": 5, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant LToken.MAX_RETENTION_RATE_UD7x3 (contracts/src/LToken.sol#84) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [LToken.MAX_RETENTION_RATE_UD7x3](contracts/src/LToken.sol#L84) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "contracts/src/LToken.sol#L84", "id": "7ff677b2ae0c9304bb57945560d05368b0eba35bea8462b05eaa5f7ee925ac16", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}, "additional_fields": {"target": "contract", "convention": "CapWords"}}], "description": "Contract WIP_LDYStaking (contracts/src/dev/LDYStaking.sol#34-487) is not in CapWords\n", "markdown": "Contract [WIP_LDYStaking](contracts/src/dev/LDYStaking.sol#L34-L487) is not in CapWords\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L34-L487", "id": "d55206aaa8c3068db513bd25fdc82937384e6172b288f79f86dd80895928086c", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "HUNDRED_UD60x18", "source_mapping": {"start": 1945, "length": 53, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [48], "starting_column": 5, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable_constant", "convention": "UPPER_CASE_WITH_UNDERSCORES"}}], "description": "Constant WIP_LDYStaking.HUNDRED_UD60x18 (contracts/src/dev/LDYStaking.sol#48) is not in UPPER_CASE_WITH_UNDERSCORES\n", "markdown": "Constant [WIP_LDYStaking.HUNDRED_UD60x18](contracts/src/dev/LDYStaking.sol#L48) is not in UPPER_CASE_WITH_UNDERSCORES\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L48", "id": "7cf7b7740f792aa73ca2219585de054d4f479a32848bfbf0761a989d34323451", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_tiers", "source_mapping": {"start": 2438, "length": 16, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [60], "starting_column": 5, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable WIP_LDYStaking._tiers (contracts/src/dev/LDYStaking.sol#60) is not in mixedCase\n", "markdown": "Variable [WIP_LDYStaking._tiers](contracts/src/dev/LDYStaking.sol#L60) is not in mixedCase\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L60", "id": "c6011534f4334d8a364d5d4846e7b3d289e8b46392c613cfdbf784c2fe6b6529", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 756, "length": 7, "filename_relative": "contracts/src/DummyLDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", "filename_short": "contracts/src/DummyLDYStaking.sol", "is_dependency": false, "lines": [24], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 678, "length": 154, "filename_relative": "contracts/src/DummyLDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", "filename_short": "contracts/src/DummyLDYStaking.sol", "is_dependency": false, "lines": [23, 24, 25, 26], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 486, "length": 348, "filename_relative": "contracts/src/DummyLDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", "filename_short": "contracts/src/DummyLDYStaking.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}, {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 486, "length": 348, "filename_relative": "contracts/src/DummyLDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", "filename_short": "contracts/src/DummyLDYStaking.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/DummyLDYStaking.sol#24)\" inLDYStaking (contracts/src/DummyLDYStaking.sol#17-27)\n", "markdown": "Redundant expression \"[account](contracts/src/DummyLDYStaking.sol#L24)\" in[LDYStaking](contracts/src/DummyLDYStaking.sol#L17-L27)\n", "first_markdown_element": "contracts/src/DummyLDYStaking.sol#L24", "id": "f68604b46e819d0fa57c9f689da378b7d0600cbd477c02f2526f64e87559445e", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 22623, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [543], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22524, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [542, 543, 544, 545, 546], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#543)\" inLToken (contracts/src/LToken.sol#56-974)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L543)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", "first_markdown_element": "contracts/src/LToken.sol#L543", "id": "abd7f6916d8d7b3a55c564ca5fe476fd5689b575c442b6bd74b163cd1a6e1b4a", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 22684, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [544], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 22524, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [542, 543, 544, 545, 546], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#544)\" inLToken (contracts/src/LToken.sol#56-974)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L544)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", "first_markdown_element": "contracts/src/LToken.sol#L544", "id": "a783dd20459876d6eb91cfc9a2c9c8dd5cbb53f205a2089a4fd0fc74b5eb3b75", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 23001, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [554], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 22902, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [553, 554, 555, 556, 557], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#554)\" inLToken (contracts/src/LToken.sol#56-974)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L554)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", "first_markdown_element": "contracts/src/LToken.sol#L554", "id": "4f0e59d0e0aa873b15369220a6b78194e433ba6ef821cf3b7cd3474cc52f99fe", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 23062, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [555], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 22902, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [553, 554, 555, 556, 557], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 2925, "length": 37278, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#555)\" inLToken (contracts/src/LToken.sol#56-974)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L555)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", "first_markdown_element": "contracts/src/LToken.sol#L555", "id": "4351c647453c18c3161b4db61b345622d45ac2a997ee88b25a53177787c769d1", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "newOwner", "source_mapping": {"start": 2882, "length": 8, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [69], "starting_column": 9, "ending_column": 17}, "type_specific_fields": {"parent": {"type": "function", "name": "transferOwnership", "source_mapping": {"start": 2796, "length": 167, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [68, 69, 70, 71], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 936, "length": 2603, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87], "starting_column": 1, "ending_column": 2}}, "signature": "transferOwnership(address)"}}}}, {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 936, "length": 2603, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"newOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#69)\" inGlobalOwnableUpgradeable (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#23-87)\n", "markdown": "Redundant expression \"[newOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L69)\" in[GlobalOwnableUpgradeable](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L23-L87)\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L69", "id": "6ca5e1ccadadb16552eb5f1cd5fba94b88033fb21b641a4fa671a66ec877f441", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 9701, "length": 7, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [238], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9598, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [237, 238, 239, 240, 241], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#238)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-448)\n", "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L238)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L448)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L238", "id": "08c5770fce2ae9da36a7f36b1c8df2b4f518bb09df6ecd7d66b8a8993b166b87", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 9754, "length": 6, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [239], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 9598, "length": 191, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [237, 238, 239, 240, 241], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 2383, "length": 17281, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#239)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-448)\n", "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L239)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L448)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L239", "id": "c5e224c37bbb63ad5b6b628894161fe6da90731c79f44e0163ce4f24ada5d709", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "HUNDRED_UD60x18", "source_mapping": {"start": 1945, "length": 53, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [48], "starting_column": 5, "ending_column": 58}, "type_specific_fields": {"parent": {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}}}, {"type": "contract", "name": "WIP_LDYStaking", "source_mapping": {"start": 1433, "length": 18058, "filename_relative": "contracts/src/dev/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", "filename_short": "contracts/src/dev/LDYStaking.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487], "starting_column": 1, "ending_column": 2}}], "description": "WIP_LDYStaking.HUNDRED_UD60x18 (contracts/src/dev/LDYStaking.sol#48) is never used in WIP_LDYStaking (contracts/src/dev/LDYStaking.sol#34-487)\n", "markdown": "[WIP_LDYStaking.HUNDRED_UD60x18](contracts/src/dev/LDYStaking.sol#L48) is never used in [WIP_LDYStaking](contracts/src/dev/LDYStaking.sol#L34-L487)\n", "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L48", "id": "dc9e7e1f98854f7a99f94e4d1ef6c8a6cb92273b2b9e42dee64531c781ad9923", "check": "unused-state", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_tiers", "source_mapping": {"start": 2195, "length": 16, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [54], "starting_column": 5, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17518, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable LDYStaking._tiers (contracts/src/LDYStaking.sol#54) is not in mixedCase\n", "markdown": "Variable [LDYStaking._tiers](contracts/src/LDYStaking.sol#L54) is not in mixedCase\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L54", "id": "4db11b0614b38bc0cfaf589013650817958efd5a9a28f80cf01033aace82e3bc", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24191, "length": 3942, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "underlying().safeTransfer(request.account,withdrawnAmount)", "source_mapping": {"start": 27482, "length": 59, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [671], "starting_column": 17, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24191, "length": 3942, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", "source_mapping": {"start": 26727, "length": 262, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [654, 655, 656, 657, 658, 659, 660, 661], "starting_column": 17, "ending_column": 18}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24191, "length": 3942, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#600-689):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#671)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/LToken.sol#654-661)\n", "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L689):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L671)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/LToken.sol#L654-L661)\n", "first_markdown_element": "contracts/src/LToken.sol#L600-L689", "id": "1d85f1833ff36ff8eaccb97d8ba1d69c57a6e3ac590dbc265bdb00f383471acf", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processBigQueuedRequest", "source_mapping": {"start": 28691, "length": 2454, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "processBigQueuedRequest(uint256)"}}, {"type": "node", "name": "require(bool,string)(request.amount > getExpectedRetained() / 2,L51)", "source_mapping": {"start": 29128, "length": 58, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [709], "starting_column": 9, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "function", "name": "processBigQueuedRequest", "source_mapping": {"start": 28691, "length": 2454, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "processBigQueuedRequest(uint256)"}}}}, {"type": "node", "name": "require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)", "source_mapping": {"start": 29548, "length": 66, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [719], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "processBigQueuedRequest", "source_mapping": {"start": 28691, "length": 2454, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "processBigQueuedRequest(uint256)"}}}}], "description": "LToken.processBigQueuedRequest(uint256) (contracts/src/LToken.sol#701-760) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(request.amount > getExpectedRetained() / 2,L51) (contracts/src/LToken.sol#709)\n\t- require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52) (contracts/src/LToken.sol#719)\n", "markdown": "[LToken.processBigQueuedRequest(uint256)](contracts/src/LToken.sol#L701-L760) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(request.amount > getExpectedRetained() / 2,L51)](contracts/src/LToken.sol#L709)\n\t- [require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)](contracts/src/LToken.sol#L719)\n", "first_markdown_element": "contracts/src/LToken.sol#L701-L760", "id": "93b1ed31bec746644d44b4202d0e55cca4b9d114793ad3fed57f4d533a794850", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "repatriate", "source_mapping": {"start": 34958, "length": 642, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "repatriate(uint256)"}}, {"type": "node", "name": "require(bool,string)(newBalance <= getExpectedRetained(),L59)", "source_mapping": {"start": 35325, "length": 51, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [873], "starting_column": 9, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "repatriate", "source_mapping": {"start": 34958, "length": 642, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "repatriate(uint256)"}}}}], "description": "LToken.repatriate(uint256) (contracts/src/LToken.sol#865-880) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(newBalance <= getExpectedRetained(),L59) (contracts/src/LToken.sol#873)\n", "markdown": "[LToken.repatriate(uint256)](contracts/src/LToken.sol#L865-L880) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(newBalance <= getExpectedRetained(),L59)](contracts/src/LToken.sol#L873)\n", "first_markdown_element": "contracts/src/LToken.sol#L865-L880", "id": "5aa366c4a309f52f6c4cfa99dc70d0c38e51839dd08e2c0245ba0124a8b7de3e", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "claimFees", "source_mapping": {"start": 35709, "length": 534, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "claimFees()"}}, {"type": "node", "name": "require(bool,string)(usableUnderlyings >= unclaimedFees,L61)", "source_mapping": {"start": 35912, "length": 50, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [890], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "claimFees", "source_mapping": {"start": 35709, "length": 534, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "claimFees()"}}}}], "description": "LToken.claimFees() (contracts/src/LToken.sol#885-900) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(usableUnderlyings >= unclaimedFees,L61) (contracts/src/LToken.sol#890)\n", "markdown": "[LToken.claimFees()](contracts/src/LToken.sol#L885-L900) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(usableUnderlyings >= unclaimedFees,L61)](contracts/src/LToken.sol#L890)\n", "first_markdown_element": "contracts/src/LToken.sol#L885-L900", "id": "961a4862262c7e49fc22f18fd8b7e9e405fda93d702b15e4e424736b298b9d58", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31501, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 33250, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [820], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31501, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34694, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#769-822):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#820)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L769-L822):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L820)\n", "first_markdown_element": "contracts/src/LToken.sol#L769-L822", "id": "0438ad76c00265ff91b9698e2b03be6e1909f1c58f98ca3d2cb18c428841c643", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "repatriate", "source_mapping": {"start": 34739, "length": 642, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "repatriate(uint256)"}}, {"type": "node", "name": "require(bool,string)(newBalance <= getExpectedRetained(),L59)", "source_mapping": {"start": 35106, "length": 51, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [870], "starting_column": 9, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "repatriate", "source_mapping": {"start": 34739, "length": 642, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "repatriate(uint256)"}}}}], "description": "LToken.repatriate(uint256) (contracts/src/LToken.sol#862-877) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(newBalance <= getExpectedRetained(),L59) (contracts/src/LToken.sol#870)\n", "markdown": "[LToken.repatriate(uint256)](contracts/src/LToken.sol#L862-L877) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(newBalance <= getExpectedRetained(),L59)](contracts/src/LToken.sol#L870)\n", "first_markdown_element": "contracts/src/LToken.sol#L862-L877", "id": "562727876ae5bb469dea656307b3f0a52ee15f46534efe07ab25dc397e245fe9", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "claimFees", "source_mapping": {"start": 35490, "length": 534, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "claimFees()"}}, {"type": "node", "name": "require(bool,string)(usableUnderlyings >= unclaimedFees,L61)", "source_mapping": {"start": 35693, "length": 50, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [887], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "claimFees", "source_mapping": {"start": 35490, "length": 534, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "claimFees()"}}}}], "description": "LToken.claimFees() (contracts/src/LToken.sol#882-897) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(usableUnderlyings >= unclaimedFees,L61) (contracts/src/LToken.sol#887)\n", "markdown": "[LToken.claimFees()](contracts/src/LToken.sol#L882-L897) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(usableUnderlyings >= unclaimedFees,L61)](contracts/src/LToken.sol#L887)\n", "first_markdown_element": "contracts/src/LToken.sol#L882-L897", "id": "f7c60596c5ac8edf5681b6bbc03f2af3df9827f0cee758939f4c46a1e6f02c0e", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24191, "length": 3723, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 27041, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [664], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24191, "length": 3723, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#664)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L664)\n", "first_markdown_element": "contracts/src/LToken.sol#L600-L686", "id": "83208b3cba4b6f22201c14232d0adfe0f8d8e63c255a692e4edbc9bcc0b218e4", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31282, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 33031, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [817], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31282, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34475, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#766-819):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#817)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L766-L819):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L817)\n", "first_markdown_element": "contracts/src/LToken.sol#L766-L819", "id": "a181084cb5d30c935835c17df4e46697693fcff936f8c9248d56f241b16f721a", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "fuel", "source_mapping": {"start": 9641, "length": 348, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "fuel(uint256)"}}, {"type": "node", "name": "rewardsReserve += amount", "source_mapping": {"start": 9818, "length": 24, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [236], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "fuel", "source_mapping": {"start": 9641, "length": 348, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "fuel(uint256)"}}}}], "description": "LDYStaking.fuel(uint256) (contracts/src/LDYStaking.sol#231-240) should emit an event for: \n\t- rewardsReserve += amount (contracts/src/LDYStaking.sol#236) \n", "markdown": "[LDYStaking.fuel(uint256)](contracts/src/LDYStaking.sol#L231-L240) should emit an event for: \n\t- [rewardsReserve += amount](contracts/src/LDYStaking.sol#L236) \n", "first_markdown_element": "contracts/src/LDYStaking.sol#L231-L240", "id": "6d01d179747ee55b13a43430959b8311eaad7f92f3d24f61b024a4e441617edc", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "unlock", "source_mapping": {"start": 10198, "length": 1001, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}, {"type": "node", "name": "require(bool,string)(accountStake.lockEnd > block.timestamp,L24)", "source_mapping": {"start": 10441, "length": 54, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [252], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "unlock", "source_mapping": {"start": 10198, "length": 1001, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}}}], "description": "LDYStaking.unlock() (contracts/src/LDYStaking.sol#247-271) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(accountStake.lockEnd > block.timestamp,L24) (contracts/src/LDYStaking.sol#252)\n", "markdown": "[LDYStaking.unlock()](contracts/src/LDYStaking.sol#L247-L271) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(accountStake.lockEnd > block.timestamp,L24)](contracts/src/LDYStaking.sol#L252)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L247-L271", "id": "af82a4504633db737ad6b57c4f762b0ea09d4573d27414e83229dd65e85fe8e6", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "unstake", "source_mapping": {"start": 12624, "length": 1091, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}, {"type": "node", "name": "require(bool,string)(stakeOf(_msgSender()) >= amount,L28)", "source_mapping": {"start": 12858, "length": 47, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [316], "starting_column": 9, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "unstake", "source_mapping": {"start": 12624, "length": 1091, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}}}, {"type": "node", "name": "require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)", "source_mapping": {"start": 13082, "length": 55, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [322], "starting_column": 9, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "unstake", "source_mapping": {"start": 12624, "length": 1091, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}}}], "description": "LDYStaking.unstake(uint216) (contracts/src/LDYStaking.sol#311-339) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(stakeOf(_msgSender()) >= amount,L28) (contracts/src/LDYStaking.sol#316)\n\t- require(bool,string)(accountStake.lockEnd <= block.timestamp,L29) (contracts/src/LDYStaking.sol#322)\n", "markdown": "[LDYStaking.unstake(uint216)](contracts/src/LDYStaking.sol#L311-L339) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(stakeOf(_msgSender()) >= amount,L28)](contracts/src/LDYStaking.sol#L316)\n\t- [require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)](contracts/src/LDYStaking.sol#L322)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L311-L339", "id": "139ddf6198e6707bc16a01c7c25289d1eee24014a6a47ad210ce11f2b7113a2b", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "tierOf", "source_mapping": {"start": 18254, "length": 564, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}, {"type": "node", "name": "_tiers.length < 1 || stakedAmount < getTier(1)", "source_mapping": {"start": 18497, "length": 46, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [466], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 18254, "length": 564, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}, {"type": "node", "name": "tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)", "source_mapping": {"start": 18741, "length": 62, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [472], "starting_column": 16, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 18254, "length": 564, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17526, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}], "description": "LDYStaking.tierOf(address) (contracts/src/LDYStaking.sol#461-473) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _tiers.length < 1 || stakedAmount < getTier(1) (contracts/src/LDYStaking.sol#466)\n\t- tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1) (contracts/src/LDYStaking.sol#472)\n", "markdown": "[LDYStaking.tierOf(address)](contracts/src/LDYStaking.sol#L461-L473) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [_tiers.length < 1 || stakedAmount < getTier(1)](contracts/src/LDYStaking.sol#L466)\n\t- [tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)](contracts/src/LDYStaking.sol#L472)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L461-L473", "id": "6227c9c239759c5f563b43fb34c0dfde383f2c8480e0825a852e4e994daf6b95", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31063, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34256, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 32812, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [811], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31063, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34256, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#760-813):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#811)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L760-L813):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L811)\n", "first_markdown_element": "contracts/src/LToken.sol#L760-L813", "id": "924b383049c62b938ef8f17b4a24fe4cf9d57a5a733659d508057b74bc6c1a86", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31065, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}, {"type": "node", "name": "(sent) = withdrawer.call{value: msg.value}()", "source_mapping": {"start": 31614, "length": 53, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [773], "starting_column": 9, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "requestWithdrawal", "source_mapping": {"start": 31065, "length": 1839, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "requestWithdrawal(uint256)"}}}}], "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#760-813):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#773)\n", "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L760-L813):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L773)\n", "first_markdown_element": "contracts/src/LToken.sol#L760-L813", "id": "d741b84731304ecbdff9bb98c6d3fed597a29fd8010e7f70f43b697ae5a01462", "check": "low-level-calls", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 8807, "length": 309, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [236, 237, 238, 239, 240, 241, 242, 243], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}, {"type": "node", "name": "withdrawer = withdrawer_", "source_mapping": {"start": 9085, "length": 24, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [242], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "setWithdrawer", "source_mapping": {"start": 8807, "length": 309, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [236, 237, 238, 239, 240, 241, 242, 243], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setWithdrawer(address)"}}}}], "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#236-243) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#242) \n", "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L236-L243) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L242) \n", "first_markdown_element": "contracts/src/LToken.sol#L236-L243", "id": "036cf7fc9ab80ae726f49d03d874e8c240f7ab8a37d3ec19953918102fea88c6", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFund", "source_mapping": {"start": 9241, "length": 271, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [249, 250, 251, 252, 253, 254, 255, 256], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}, {"type": "node", "name": "fund = fund_", "source_mapping": {"start": 9493, "length": 12, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [255], "starting_column": 9, "ending_column": 21}, "type_specific_fields": {"parent": {"type": "function", "name": "setFund", "source_mapping": {"start": 9241, "length": 271, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [249, 250, 251, 252, 253, 254, 255, 256], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setFund(address)"}}}}], "description": "LToken.setFund(address) (contracts/src/LToken.sol#249-256) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#255) \n", "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L249-L256) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L255) \n", "first_markdown_element": "contracts/src/LToken.sol#L249-L256", "id": "4e2baec0aa7e231899515b62b97cec2bb89771ceb4c66876369cb84e7cee6bbc", "check": "events-access", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}, {"type": "node", "name": "growthRateSUD = (addedAmountSUD * _toSUD(100)) / accountStakeSUD", "source_mapping": {"start": 7096, "length": 76, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [173], "starting_column": 9, "ending_column": 85}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "lockEndIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / _toSUD(100)", "source_mapping": {"start": 7722, "length": 77, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [185], "starting_column": 13, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}], "description": "LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/LDYStaking.sol#160-199) performs a multiplication on the result of a division:\n\t- growthRateSUD = (addedAmountSUD * _toSUD(100)) / accountStakeSUD (contracts/src/LDYStaking.sol#173)\n\t- lockEndIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / _toSUD(100) (contracts/src/LDYStaking.sol#185)\n", "markdown": "[LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/LDYStaking.sol#L160-L199) performs a multiplication on the result of a division:\n\t- [growthRateSUD = (addedAmountSUD * _toSUD(100)) / accountStakeSUD](contracts/src/LDYStaking.sol#L173)\n\t- [lockEndIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / _toSUD(100)](contracts/src/LDYStaking.sol#L185)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L160-L199", "id": "8e5aa6e7c19012e6e8ad1543c95f00659c467da2e407efb5fa093f0dd777559c", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10506, "length": 868, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "elapsedYearsSUD = (elaspedTimeSUD * _toSUD(1)) / _toSUD(31536000)", "source_mapping": {"start": 10819, "length": 77, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [276], "starting_column": 9, "ending_column": 86}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10506, "length": 868, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)", "source_mapping": {"start": 11034, "length": 62, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [280], "starting_column": 9, "ending_column": 71}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10506, "length": 868, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#268-286) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elaspedTimeSUD * _toSUD(1)) / _toSUD(31536000) (contracts/src/abstracts/InvestUpgradeable.sol#276)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1) (contracts/src/abstracts/InvestUpgradeable.sol#280)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L268-L286) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elaspedTimeSUD * _toSUD(1)) / _toSUD(31536000)](contracts/src/abstracts/InvestUpgradeable.sol#L276)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)](contracts/src/abstracts/InvestUpgradeable.sol#L280)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L268-L286", "id": "de9c660a978ad1ed964f186a2791f28e954df2ce5cff7ccbb8fff9371eb46e00", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10506, "length": 868, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}, {"type": "node", "name": "growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)", "source_mapping": {"start": 11034, "length": 62, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [280], "starting_column": 9, "ending_column": 71}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10506, "length": 868, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}, {"type": "node", "name": "rewardsSUD = (investedAmountSUD * growthSUD) / _toSUD(100)", "source_mapping": {"start": 11214, "length": 70, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [284], "starting_column": 9, "ending_column": 79}, "type_specific_fields": {"parent": {"type": "function", "name": "_calculatePeriodRewards", "source_mapping": {"start": 10506, "length": 868, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)"}}}}], "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#268-286) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1) (contracts/src/abstracts/InvestUpgradeable.sol#280)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / _toSUD(100) (contracts/src/abstracts/InvestUpgradeable.sol#284)\n", "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L268-L286) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)](contracts/src/abstracts/InvestUpgradeable.sol#L280)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / _toSUD(100)](contracts/src/abstracts/InvestUpgradeable.sol#L284)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L268-L286", "id": "edd240cb67664555ec3320c4e3cd6a6a757f300b9150239aa95211540d9b3c2c", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}, {"type": "node", "name": "accountStake.amount == 0", "source_mapping": {"start": 6860, "length": 24, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [168], "starting_column": 13, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}], "description": "LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/LDYStaking.sol#160-199) uses a dangerous strict equality:\n\t- accountStake.amount == 0 (contracts/src/LDYStaking.sol#168)\n", "markdown": "[LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/LDYStaking.sol#L160-L199) uses a dangerous strict equality:\n\t- [accountStake.amount == 0](contracts/src/LDYStaking.sol#L168)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L160-L199", "id": "9a6c62711cfdc22aff9f71cc36f6a0cb01064417d6363746f173617f54d8d176", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17851, "length": 1811, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsInfos[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18305, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [422], "starting_column": 13, "ending_column": 79}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17851, "length": 1811, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#415-453) uses a dangerous strict equality:\n\t- accountsInfos[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#422)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L415-L453) uses a dangerous strict equality:\n\t- [accountsInfos[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L422)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L415-L453", "id": "ce88587a147e1e7308593f97bc13bd79909eb1b0e747d3c3f17ef70a31daac76", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_isClaiming", "source_mapping": {"start": 3220, "length": 24, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [73], "starting_column": 5, "ending_column": 29}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}}}, {"type": "node", "name": "_isClaiming = true", "source_mapping": {"start": 19216, "length": 18, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [443], "starting_column": 13, "ending_column": 31}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17851, "length": 1811, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}, {"type": "node", "name": "_isClaiming = false", "source_mapping": {"start": 19317, "length": 19, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [445], "starting_column": 13, "ending_column": 32}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17851, "length": 1811, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#73) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#443)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#445)\n", "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L73) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L443)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L445)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L73", "id": "9cc9bcadf655d3be4572dafc62236376b1fd04b4f2b4b1d5e5286f89adb14450", "check": "write-after-write", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "setUnlockFeesRate", "source_mapping": {"start": 9072, "length": 126, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [215, 216, 217], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "setUnlockFeesRate(uint32)"}}, {"type": "node", "name": "unlockFeesRateUD7x3 = unlockFeesRateUD7x3_", "source_mapping": {"start": 9153, "length": 38, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [216], "starting_column": 9, "ending_column": 47}, "type_specific_fields": {"parent": {"type": "function", "name": "setUnlockFeesRate", "source_mapping": {"start": 9072, "length": 126, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [215, 216, 217], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "setUnlockFeesRate(uint32)"}}}}], "description": "LDYStaking.setUnlockFeesRate(uint32) (contracts/src/LDYStaking.sol#215-217) should emit an event for: \n\t- unlockFeesRateUD7x3 = unlockFeesRateUD7x3_ (contracts/src/LDYStaking.sol#216) \n", "markdown": "[LDYStaking.setUnlockFeesRate(uint32)](contracts/src/LDYStaking.sol#L215-L217) should emit an event for: \n\t- [unlockFeesRateUD7x3 = unlockFeesRateUD7x3_](contracts/src/LDYStaking.sol#L216) \n", "first_markdown_element": "contracts/src/LDYStaking.sol#L215-L217", "id": "0c4f51e21561cd5f48e20ec48724e7e5219df4815dfd5b947a98517e2ac121bf", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setStakeLockDuration", "source_mapping": {"start": 9351, "length": 129, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [223, 224, 225], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "setStakeLockDuration(uint40)"}}, {"type": "node", "name": "stakeLockDuration = stakeLockDuration_", "source_mapping": {"start": 9435, "length": 38, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [224], "starting_column": 9, "ending_column": 47}, "type_specific_fields": {"parent": {"type": "function", "name": "setStakeLockDuration", "source_mapping": {"start": 9351, "length": 129, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [223, 224, 225], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "setStakeLockDuration(uint40)"}}}}], "description": "LDYStaking.setStakeLockDuration(uint40) (contracts/src/LDYStaking.sol#223-225) should emit an event for: \n\t- stakeLockDuration = stakeLockDuration_ (contracts/src/LDYStaking.sol#224) \n", "markdown": "[LDYStaking.setStakeLockDuration(uint40)](contracts/src/LDYStaking.sol#L223-L225) should emit an event for: \n\t- [stakeLockDuration = stakeLockDuration_](contracts/src/LDYStaking.sol#L224) \n", "first_markdown_element": "contracts/src/LDYStaking.sol#L223-L225", "id": "6e4ce598f465fc7f714564873bdf730ecb45de8ee772cd2a7126b3cc0da0e59d", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "fuel", "source_mapping": {"start": 9641, "length": 304, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [231, 232, 233, 234, 235, 236, 237, 238], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "fuel(uint256)"}}, {"type": "node", "name": "rewardsReserve += amount", "source_mapping": {"start": 9914, "length": 24, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [237], "starting_column": 9, "ending_column": 33}, "type_specific_fields": {"parent": {"type": "function", "name": "fuel", "source_mapping": {"start": 9641, "length": 304, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [231, 232, 233, 234, 235, 236, 237, 238], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "fuel(uint256)"}}}}], "description": "LDYStaking.fuel(uint256) (contracts/src/LDYStaking.sol#231-238) should emit an event for: \n\t- rewardsReserve += amount (contracts/src/LDYStaking.sol#237) \n", "markdown": "[LDYStaking.fuel(uint256)](contracts/src/LDYStaking.sol#L231-L238) should emit an event for: \n\t- [rewardsReserve += amount](contracts/src/LDYStaking.sol#L237) \n", "first_markdown_element": "contracts/src/LDYStaking.sol#L231-L238", "id": "64b923f0ea10991e0b7c25cb18166c776d819516fee92d92068728d09516f45f", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setFeesRate", "source_mapping": {"start": 7747, "length": 102, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [208, 209, 210], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}, {"type": "node", "name": "feesRateUD7x3 = feesRateUD7x3_", "source_mapping": {"start": 7816, "length": 26, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [209], "starting_column": 9, "ending_column": 35}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 7747, "length": 102, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [208, 209, 210], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}], "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#208-210) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#209) \n", "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L208-L210) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L209) \n", "first_markdown_element": "contracts/src/LToken.sol#L208-L210", "id": "bd1886da47f3f17db675dc2f0504397d1cb0e95289d6f05915bc9351bb957daa", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 8200, "length": 185, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [219, 220, 221, 222], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}, {"type": "node", "name": "retentionRateUD7x3 = retentionRateUD7x3_", "source_mapping": {"start": 8342, "length": 36, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [221], "starting_column": 9, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 8200, "length": 185, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [219, 220, 221, 222], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}], "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#219-222) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#221) \n", "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L219-L222) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L221) \n", "first_markdown_element": "contracts/src/LToken.sol#L219-L222", "id": "ed349a46c15f7fca6087c5a6ce53b304076e0c64649e7780d5b8ee3217ebe903", "check": "events-maths", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "isBlacklisted", "source_mapping": {"start": 2381, "length": 132, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "isBlacklisted(address)"}}, {"type": "node", "name": "_globalBlacklist.isBlacklisted(account)", "source_mapping": {"start": 2460, "length": 46, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [59], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "isBlacklisted", "source_mapping": {"start": 2381, "length": 132, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [58, 59, 60], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "isBlacklisted(address)"}}}}], "description": "GlobalRestrictableUpgradeable.isBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#58-60) has external calls inside a loop: _globalBlacklist.isBlacklisted(account) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#59)\n", "markdown": "[GlobalRestrictableUpgradeable.isBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L60) has external calls inside a loop: [_globalBlacklist.isBlacklisted(account)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L59)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L60", "id": "092edb153b923971dc44ef96ef010e83fddfc252ac0be5af66f319fead6067d2", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_toDecimals", "source_mapping": {"start": 8779, "length": 192, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [225, 226, 227, 228], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_toDecimals(uint256)"}}, {"type": "node", "name": "decimals = IERC20MetadataUpgradeable(address(invested())).decimals()", "source_mapping": {"start": 8853, "length": 76, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [226], "starting_column": 9, "ending_column": 85}, "type_specific_fields": {"parent": {"type": "function", "name": "_toDecimals", "source_mapping": {"start": 8779, "length": 192, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [225, 226, 227, 228], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_toDecimals(uint256)"}}}}], "description": "InvestUpgradeable._toDecimals(uint256) (contracts/src/abstracts/InvestUpgradeable.sol#225-228) has external calls inside a loop: decimals = IERC20MetadataUpgradeable(address(invested())).decimals() (contracts/src/abstracts/InvestUpgradeable.sol#226)\n", "markdown": "[InvestUpgradeable._toDecimals(uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L225-L228) has external calls inside a loop: [decimals = IERC20MetadataUpgradeable(address(invested())).decimals()](contracts/src/abstracts/InvestUpgradeable.sol#L226)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L225-L228", "id": "97da19c1aaea2cedb0894e3234c6676a51cdbaaf36dfd76ce5d5a55c1e8c07a2", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 21235, "length": 637, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}, {"type": "node", "name": "ldyStaking.tierOf(account) >= 2", "source_mapping": {"start": 21476, "length": 31, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [537], "starting_column": 13, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 21235, "length": 637, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#532-545) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#537)\n", "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L532-L545) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L537)\n", "first_markdown_element": "contracts/src/LToken.sol#L532-L545", "id": "271ee10cbf2006d0cdb07f07313b5a495e00f1852e819513c0497e696ecf564e", "check": "calls-loop", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}, {"type": "node", "name": "accountStake.amount == 0", "source_mapping": {"start": 6860, "length": 24, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [168], "starting_column": 13, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "growthRateSUD > type()(uint256).max / stakeLockDurationSUD", "source_mapping": {"start": 7471, "length": 58, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [179], "starting_column": 13, "ending_column": 71}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "accountStake.lockEnd < uint40(block.timestamp)", "source_mapping": {"start": 8024, "length": 154, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [191, 192, 193], "starting_column": 9, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}, {"type": "node", "name": "lockEndIncrease + remainingLockDuration > stakeLockDuration", "source_mapping": {"start": 8267, "length": 163, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [196, 197, 198], "starting_column": 9, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "function", "name": "_getLockDurationIncrease", "source_mapping": {"start": 6517, "length": 1920, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "_getLockDurationIncrease(address,uint256)"}}}}], "description": "LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/LDYStaking.sol#160-199) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountStake.amount == 0 (contracts/src/LDYStaking.sol#168)\n\t- growthRateSUD > type()(uint256).max / stakeLockDurationSUD (contracts/src/LDYStaking.sol#179)\n\t- accountStake.lockEnd < uint40(block.timestamp) (contracts/src/LDYStaking.sol#191-193)\n\t- lockEndIncrease + remainingLockDuration > stakeLockDuration (contracts/src/LDYStaking.sol#196-198)\n", "markdown": "[LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/LDYStaking.sol#L160-L199) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountStake.amount == 0](contracts/src/LDYStaking.sol#L168)\n\t- [growthRateSUD > type()(uint256).max / stakeLockDurationSUD](contracts/src/LDYStaking.sol#L179)\n\t- [accountStake.lockEnd < uint40(block.timestamp)](contracts/src/LDYStaking.sol#L191-L193)\n\t- [lockEndIncrease + remainingLockDuration > stakeLockDuration](contracts/src/LDYStaking.sol#L196-L198)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L160-L199", "id": "3acfd4364fef3684d7c8c27bf46f01211e5282f13bb820926d419cf0f9395c00", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "unlock", "source_mapping": {"start": 10154, "length": 1001, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}, {"type": "node", "name": "require(bool,string)(accountStake.lockEnd > block.timestamp,L24)", "source_mapping": {"start": 10397, "length": 54, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [250], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "unlock", "source_mapping": {"start": 10154, "length": 1001, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}}}], "description": "LDYStaking.unlock() (contracts/src/LDYStaking.sol#245-269) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(accountStake.lockEnd > block.timestamp,L24) (contracts/src/LDYStaking.sol#250)\n", "markdown": "[LDYStaking.unlock()](contracts/src/LDYStaking.sol#L245-L269) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(accountStake.lockEnd > block.timestamp,L24)](contracts/src/LDYStaking.sol#L250)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L245-L269", "id": "cb210c45be5cfa2e86824f7f0accebe694a86c8d6860c652ddf05f6ea89f3bd7", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "unstake", "source_mapping": {"start": 12580, "length": 1091, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}, {"type": "node", "name": "require(bool,string)(stakeOf(_msgSender()) >= amount,L28)", "source_mapping": {"start": 12814, "length": 47, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [314], "starting_column": 9, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "unstake", "source_mapping": {"start": 12580, "length": 1091, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}}}, {"type": "node", "name": "require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)", "source_mapping": {"start": 13038, "length": 55, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [320], "starting_column": 9, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "unstake", "source_mapping": {"start": 12580, "length": 1091, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "unstake(uint216)"}}}}], "description": "LDYStaking.unstake(uint216) (contracts/src/LDYStaking.sol#309-337) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(stakeOf(_msgSender()) >= amount,L28) (contracts/src/LDYStaking.sol#314)\n\t- require(bool,string)(accountStake.lockEnd <= block.timestamp,L29) (contracts/src/LDYStaking.sol#320)\n", "markdown": "[LDYStaking.unstake(uint216)](contracts/src/LDYStaking.sol#L309-L337) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(stakeOf(_msgSender()) >= amount,L28)](contracts/src/LDYStaking.sol#L314)\n\t- [require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)](contracts/src/LDYStaking.sol#L320)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L309-L337", "id": "4f61e5409d12efaf5b49491311f4f6c5384af368c3f08beb15c5a4a0a258ee8f", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "tierOf", "source_mapping": {"start": 18210, "length": 564, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}, {"type": "node", "name": "_tiers.length < 1 || stakedAmount < getTier(1)", "source_mapping": {"start": 18453, "length": 46, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [464], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 18210, "length": 564, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}, {"type": "node", "name": "tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)", "source_mapping": {"start": 18697, "length": 62, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [470], "starting_column": 16, "ending_column": 78}, "type_specific_fields": {"parent": {"type": "function", "name": "tierOf", "source_mapping": {"start": 18210, "length": 564, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "tierOf(address)"}}}}], "description": "LDYStaking.tierOf(address) (contracts/src/LDYStaking.sol#459-471) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _tiers.length < 1 || stakedAmount < getTier(1) (contracts/src/LDYStaking.sol#464)\n\t- tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1) (contracts/src/LDYStaking.sol#470)\n", "markdown": "[LDYStaking.tierOf(address)](contracts/src/LDYStaking.sol#L459-L471) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [_tiers.length < 1 || stakedAmount < getTier(1)](contracts/src/LDYStaking.sol#L464)\n\t- [tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)](contracts/src/LDYStaking.sol#L470)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L459-L471", "id": "8a3f77270736f08c7803797bd0208c437d53a5749164777d19af7d00517dd79c", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "recoverUnderlying", "source_mapping": {"start": 14149, "length": 574, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "recoverUnderlying()"}}, {"type": "node", "name": "require(bool,string)(recoverableAmount > 0,L44)", "source_mapping": {"start": 14543, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [375], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "recoverUnderlying", "source_mapping": {"start": 14149, "length": 574, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "recoverUnderlying()"}}}}], "description": "LToken.recoverUnderlying() (contracts/src/LToken.sol#369-379) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(recoverableAmount > 0,L44) (contracts/src/LToken.sol#375)\n", "markdown": "[LToken.recoverUnderlying()](contracts/src/LToken.sol#L369-L379) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(recoverableAmount > 0,L44)](contracts/src/LToken.sol#L375)\n", "first_markdown_element": "contracts/src/LToken.sol#L369-L379", "id": "7947031d9af57461cc5104246d6d277d55d0e34e63c726742b66c23abd42c9e5", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_transferExceedingToFund", "source_mapping": {"start": 18718, "length": 536, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "_transferExceedingToFund()"}}, {"type": "node", "name": "usableUnderlyings > expectedRetained", "source_mapping": {"start": 18894, "length": 129, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [473, 474, 475], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "_transferExceedingToFund", "source_mapping": {"start": 18718, "length": 536, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "_transferExceedingToFund()"}}}}], "description": "LToken._transferExceedingToFund() (contracts/src/LToken.sol#470-482) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- usableUnderlyings > expectedRetained (contracts/src/LToken.sol#473-475)\n", "markdown": "[LToken._transferExceedingToFund()](contracts/src/LToken.sol#L470-L482) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [usableUnderlyings > expectedRetained](contracts/src/LToken.sol#L473-L475)\n", "first_markdown_element": "contracts/src/LToken.sol#L470-L482", "id": "549dc531d5c0d7118dc3f28a6c1e6729cc9b3f8666d8a8519d1f6b9429c98c8d", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "instantWithdrawal", "source_mapping": {"start": 22380, "length": 1543, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "instantWithdrawal(uint256)"}}, {"type": "node", "name": "cond1 = totalQueued + amount <= usableUnderlyings", "source_mapping": {"start": 22685, "length": 54, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [561], "starting_column": 9, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "function", "name": "instantWithdrawal", "source_mapping": {"start": 22380, "length": 1543, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "instantWithdrawal(uint256)"}}}}, {"type": "node", "name": "cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings", "source_mapping": {"start": 22842, "length": 80, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [564], "starting_column": 9, "ending_column": 89}, "type_specific_fields": {"parent": {"type": "function", "name": "instantWithdrawal", "source_mapping": {"start": 22380, "length": 1543, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "instantWithdrawal(uint256)"}}}}, {"type": "node", "name": "! (cond1 || cond2)", "source_mapping": {"start": 23002, "length": 17, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [567], "starting_column": 13, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "function", "name": "instantWithdrawal", "source_mapping": {"start": 22380, "length": 1543, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "instantWithdrawal(uint256)"}}}}], "description": "LToken.instantWithdrawal(uint256) (contracts/src/LToken.sol#556-593) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- cond1 = totalQueued + amount <= usableUnderlyings (contracts/src/LToken.sol#561)\n\t- cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings (contracts/src/LToken.sol#564)\n\t- ! (cond1 || cond2) (contracts/src/LToken.sol#567)\n", "markdown": "[LToken.instantWithdrawal(uint256)](contracts/src/LToken.sol#L556-L593) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [cond1 = totalQueued + amount <= usableUnderlyings](contracts/src/LToken.sol#L561)\n\t- [cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings](contracts/src/LToken.sol#L564)\n\t- [! (cond1 || cond2)](contracts/src/LToken.sol#L567)\n", "first_markdown_element": "contracts/src/LToken.sol#L556-L593", "id": "fe2aa4b380b1550e20a73f7e88e849b560c96933798ef32843ec30e9a224c0a1", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "request.amount > getExpectedRetained() / 2", "source_mapping": {"start": 25696, "length": 42, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [631], "starting_column": 22, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- request.amount > getExpectedRetained() / 2 (contracts/src/LToken.sol#631)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [request.amount > getExpectedRetained() / 2](contracts/src/LToken.sol#L631)\n", "first_markdown_element": "contracts/src/LToken.sol#L600-L686", "id": "6c0b19f41d1632b8383ab18c383ad730cdf4244225c25280ec1e5afefcca039e", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processBigQueuedRequest", "source_mapping": {"start": 28479, "length": 2230, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processBigQueuedRequest(uint256)"}}, {"type": "node", "name": "require(bool,string)(request.amount > getExpectedRetained() / 2,L51)", "source_mapping": {"start": 28916, "length": 58, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [706], "starting_column": 9, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "function", "name": "processBigQueuedRequest", "source_mapping": {"start": 28479, "length": 2230, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processBigQueuedRequest(uint256)"}}}}, {"type": "node", "name": "require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)", "source_mapping": {"start": 29336, "length": 66, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [716], "starting_column": 9, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "processBigQueuedRequest", "source_mapping": {"start": 28479, "length": 2230, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processBigQueuedRequest(uint256)"}}}}], "description": "LToken.processBigQueuedRequest(uint256) (contracts/src/LToken.sol#698-751) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(request.amount > getExpectedRetained() / 2,L51) (contracts/src/LToken.sol#706)\n\t- require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52) (contracts/src/LToken.sol#716)\n", "markdown": "[LToken.processBigQueuedRequest(uint256)](contracts/src/LToken.sol#L698-L751) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(request.amount > getExpectedRetained() / 2,L51)](contracts/src/LToken.sol#L706)\n\t- [require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)](contracts/src/LToken.sol#L716)\n", "first_markdown_element": "contracts/src/LToken.sol#L698-L751", "id": "c94a3bfaf014f65db71217f283a14bf7c788e148c881ee4ad05e3a05aa58e2d9", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "repatriate", "source_mapping": {"start": 34522, "length": 642, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "repatriate(uint256)"}}, {"type": "node", "name": "require(bool,string)(newBalance <= getExpectedRetained(),L59)", "source_mapping": {"start": 34889, "length": 51, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [864], "starting_column": 9, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "repatriate", "source_mapping": {"start": 34522, "length": 642, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "repatriate(uint256)"}}}}], "description": "LToken.repatriate(uint256) (contracts/src/LToken.sol#856-871) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(newBalance <= getExpectedRetained(),L59) (contracts/src/LToken.sol#864)\n", "markdown": "[LToken.repatriate(uint256)](contracts/src/LToken.sol#L856-L871) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(newBalance <= getExpectedRetained(),L59)](contracts/src/LToken.sol#L864)\n", "first_markdown_element": "contracts/src/LToken.sol#L856-L871", "id": "b883d77f8d0d1ca853012da634f66c35ecc9d0adaf9391be23fc4923714414f3", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "claimFees", "source_mapping": {"start": 35273, "length": 534, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "claimFees()"}}, {"type": "node", "name": "require(bool,string)(usableUnderlyings >= unclaimedFees,L61)", "source_mapping": {"start": 35476, "length": 50, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [881], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "claimFees", "source_mapping": {"start": 35273, "length": 534, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "claimFees()"}}}}], "description": "LToken.claimFees() (contracts/src/LToken.sol#876-891) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(usableUnderlyings >= unclaimedFees,L61) (contracts/src/LToken.sol#881)\n", "markdown": "[LToken.claimFees()](contracts/src/LToken.sol#L876-L891) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(usableUnderlyings >= unclaimedFees,L61)](contracts/src/LToken.sol#L881)\n", "first_markdown_element": "contracts/src/LToken.sol#L876-L891", "id": "60548af87100f1d4c3ff7ae7d4e9c984b9c6312a296a29ebd6ccda8690184db2", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17851, "length": 1811, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}, {"type": "node", "name": "accountsInfos[account].period.timestamp == uint40(block.timestamp)", "source_mapping": {"start": 18305, "length": 66, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [422], "starting_column": 13, "ending_column": 79}, "type_specific_fields": {"parent": {"type": "function", "name": "_beforeInvestmentChange", "source_mapping": {"start": 17851, "length": 1811, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_beforeInvestmentChange(address,bool)"}}}}], "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#415-453) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsInfos[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#422)\n", "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L415-L453) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsInfos[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L422)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L415-L453", "id": "46bf152671fcc8b1ae78deb561ecb4bf3b1a2dfa3633270fc07eb9045ba6d17e", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "notBlacklisted", "source_mapping": {"start": 2052, "length": 115, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "notBlacklisted(address)"}}, {"type": "node", "name": "require(bool,string)(isBlacklisted(account) == false,L9)", "source_mapping": {"start": 2103, "length": 46, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [49], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "notBlacklisted", "source_mapping": {"start": 2052, "length": 115, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "notBlacklisted(address)"}}}}], "description": "GlobalRestrictableUpgradeable.notBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#48-51) compares to a boolean constant:\n\t-require(bool,string)(isBlacklisted(account) == false,L9) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#49)\n", "markdown": "[GlobalRestrictableUpgradeable.notBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L48-L51) compares to a boolean constant:\n\t-[require(bool,string)(isBlacklisted(account) == false,L9)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L49)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L48-L51", "id": "77463bf51bb7b2db2810d546bad8dce0cfea2ee2735b626c1a3465192d18d256", "check": "boolean-equal", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 25335, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [624], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#624)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L624)\n", "first_markdown_element": "contracts/src/LToken.sol#L600-L686", "id": "8a54ddf7bf945327b4b1bd910c39cc1863db92f05f8da559b7a52fa42dbbf89e", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 25803, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [633], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#633)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L633)\n", "first_markdown_element": "contracts/src/LToken.sol#L600-L686", "id": "eddc270c89c843fce92b98f6ffaf141102b33d3eb9df3b91bafdc139a62d9166", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}, {"type": "node", "name": "delete withdrawalQueue[nextRequestId]", "source_mapping": {"start": 27292, "length": 37, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [668], "starting_column": 17, "ending_column": 54}, "type_specific_fields": {"parent": {"type": "function", "name": "processQueuedRequests", "source_mapping": {"start": 24193, "length": 3728, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "processQueuedRequests()"}}}}], "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#668)\n", "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L668)\n", "first_markdown_element": "contracts/src/LToken.sol#L600-L686", "id": "58ce01171ba5dc5553ff2088d66272101a4c6fbee983756d5fde0551f6a9043f", "check": "costly-loop", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__Base_init_unchained", "source_mapping": {"start": 2317, "length": 61, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [58], "starting_column": 5, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "contract", "name": "BaseUpgradeable", "source_mapping": {"start": 923, "length": 2114, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "starting_column": 1, "ending_column": 2}}, "signature": "__Base_init_unchained()"}}], "description": "BaseUpgradeable.__Base_init_unchained() (contracts/src/abstracts/base/BaseUpgradeable.sol#58) is never used and should be removed\n", "markdown": "[BaseUpgradeable.__Base_init_unchained()](contracts/src/abstracts/base/BaseUpgradeable.sol#L58) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L58", "id": "a17e8b636b70c8282b42f4d2a9510d9351ae1035a36f5e8c25f54028360cdbb1", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__ERC20Base_init_unchained", "source_mapping": {"start": 1848, "length": 66, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [41], "starting_column": 5, "ending_column": 71}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20BaseUpgradeable", "source_mapping": {"start": 844, "length": 2666, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20Base_init_unchained()"}}], "description": "ERC20BaseUpgradeable.__ERC20Base_init_unchained() (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#41) is never used and should be removed\n", "markdown": "[ERC20BaseUpgradeable.__ERC20Base_init_unchained()](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41", "id": "31b7e269d72dd7bf1ddf4d0d6dcd7752a934613e5c0e76d937b9bfe6b871beb7", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__GlobalPausable_init", "source_mapping": {"start": 1305, "length": 168, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [30, 31, 32, 33], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalPausable_init(address)"}}], "description": "GlobalPausableUpgradeable.__GlobalPausable_init(address) (contracts/src/abstracts/GlobalPausableUpgradeable.sol#30-33) is never used and should be removed\n", "markdown": "[GlobalPausableUpgradeable.__GlobalPausable_init(address)](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33", "id": "47c8542f591e154ee005a192a0cdbb504c04e76158dcad3c8028ccc2f131744a", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__GlobalRestrictable_init", "source_mapping": {"start": 1248, "length": 157, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalRestrictable_init(address)"}}], "description": "GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#27-29) is never used and should be removed\n", "markdown": "[GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29", "id": "ce1d20c3f312e69f007b8f7b71f9916109b200e860f22b929bea1a9b290771b0", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__Invest_init", "source_mapping": {"start": 3921, "length": 294, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [90, 91, 92, 93, 94, 95, 96, 97, 98], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "__Invest_init(address,address,address,address)"}}], "description": "InvestUpgradeable.__Invest_init(address,address,address,address) (contracts/src/abstracts/InvestUpgradeable.sol#90-98) is never used and should be removed\n", "markdown": "[InvestUpgradeable.__Invest_init(address,address,address,address)](contracts/src/abstracts/InvestUpgradeable.sol#L90-L98) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L90-L98", "id": "4cad44a31c653c38c1f2917d4874e869e8fee018e4b7a9ed3f6d5af1dbeda3a5", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__Recoverable_init", "source_mapping": {"start": 813, "length": 167, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [20, 21, 22, 23], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "RecoverableUpgradeable", "source_mapping": {"start": 683, "length": 1460, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53], "starting_column": 1, "ending_column": 2}}, "signature": "__Recoverable_init(address)"}}], "description": "RecoverableUpgradeable.__Recoverable_init(address) (contracts/src/abstracts/RecoverableUpgradeable.sol#20-23) is never used and should be removed\n", "markdown": "[RecoverableUpgradeable.__Recoverable_init(address)](contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23) is never used and should be removed\n", "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23", "id": "1d9f0762325f1a9906b2b44290e848d1a995b76e85040263cb82bf7c88f68fa6", "check": "dead-code", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "__GlobalOwnable_init", "source_mapping": {"start": 1269, "length": 382, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [30, 31, 32, 33, 34, 35], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalOwnable_init(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function GlobalOwnableUpgradeable.__GlobalOwnable_init(address) (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#30-35) is not in mixedCase\n", "markdown": "Function [GlobalOwnableUpgradeable.__GlobalOwnable_init(address)](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L30-L35) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L30-L35", "id": "12431f0df37f282615437918efb76a9cb00a63ba1e07be4857d55925e10b958a", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__GlobalOwnable_init_unchained", "source_mapping": {"start": 1657, "length": 145, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [37, 38, 39], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalOwnable_init_unchained(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address) (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#37-39) is not in mixedCase\n", "markdown": "Function [GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address)](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L37-L39) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L37-L39", "id": "de646abc41618180f9f77382ce7bc1608b6776b8598dfecfb3bbf7c3ce7455cb", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 3007, "length": 25, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [73], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable GlobalOwnableUpgradeable.__gap (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#73) is not in mixedCase\n", "markdown": "Variable [GlobalOwnableUpgradeable.__gap](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L73) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L73", "id": "3f47daad5ab5cc56ecd5a6334c857e82140ade7af9a2ef28565df998a82fa90a", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__GlobalPausable_init", "source_mapping": {"start": 1305, "length": 168, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [30, 31, 32, 33], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalPausable_init(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function GlobalPausableUpgradeable.__GlobalPausable_init(address) (contracts/src/abstracts/GlobalPausableUpgradeable.sol#30-33) is not in mixedCase\n", "markdown": "Function [GlobalPausableUpgradeable.__GlobalPausable_init(address)](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33", "id": "fdda1388218e25f7803985e76069313056f9b7d9dcc6eee49846a8348fbed0f7", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__GlobalPausable_init_unchained", "source_mapping": {"start": 1479, "length": 146, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [35, 36, 37], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalPausable_init_unchained(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address) (contracts/src/abstracts/GlobalPausableUpgradeable.sol#35-37) is not in mixedCase\n", "markdown": "Function [GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address)](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L35-L37) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L35-L37", "id": "2018d4138b0048ee8c52de10caf52edf5ca0ef0e5fc95259d2942447a3c1075f", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 2451, "length": 25, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [61], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable GlobalPausableUpgradeable.__gap (contracts/src/abstracts/GlobalPausableUpgradeable.sol#61) is not in mixedCase\n", "markdown": "Variable [GlobalPausableUpgradeable.__gap](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L61) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L61", "id": "111481d2f9b7767e2ee49372683c68041b638e3bc74fcdcfd7b15bfd54df0bf1", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__GlobalRestrictable_init", "source_mapping": {"start": 1248, "length": 157, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalRestrictable_init(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#27-29) is not in mixedCase\n", "markdown": "Function [GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29", "id": "777b223064723c54e04e0effaf164929327aa944a77a51261744dd5b392e8308", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__GlobalRestrictable_init_unchained", "source_mapping": {"start": 1411, "length": 166, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [31, 32, 33], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalRestrictable_init_unchained(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#31-33) is not in mixedCase\n", "markdown": "Function [GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L31-L33) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L31-L33", "id": "cf7ce6915177bc78ad6fe5393cb157057bf5a3d09ac1d5dc5d9813ebe179713d", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 2778, "length": 25, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [67], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable GlobalRestrictableUpgradeable.__gap (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#67) is not in mixedCase\n", "markdown": "Variable [GlobalRestrictableUpgradeable.__gap](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67", "id": "fab288b6cd2599539363b01adef11f1922a68041c34e60ba8f166f6562c4b2c6", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Invest_init", "source_mapping": {"start": 3921, "length": 294, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [90, 91, 92, 93, 94, 95, 96, 97, 98], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "__Invest_init(address,address,address,address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function InvestUpgradeable.__Invest_init(address,address,address,address) (contracts/src/abstracts/InvestUpgradeable.sol#90-98) is not in mixedCase\n", "markdown": "Function [InvestUpgradeable.__Invest_init(address,address,address,address)](contracts/src/abstracts/InvestUpgradeable.sol#L90-L98) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L90-L98", "id": "58bb354a0d3add83b462c0fde5e45739bbedc34c14489fc1d3157c102088a502", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Invest_init_unchained", "source_mapping": {"start": 4221, "length": 135, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [100, 101, 102], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "__Invest_init_unchained(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function InvestUpgradeable.__Invest_init_unchained(address) (contracts/src/abstracts/InvestUpgradeable.sol#100-102) is not in mixedCase\n", "markdown": "Function [InvestUpgradeable.__Invest_init_unchained(address)](contracts/src/abstracts/InvestUpgradeable.sol#L100-L102) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L100-L102", "id": "d382054d26f3fc3ce16ad9ae8488c9c4c867c1fb9f41dfb90c607928a875b60a", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 19927, "length": 25, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [460], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable InvestUpgradeable.__gap (contracts/src/abstracts/InvestUpgradeable.sol#460) is not in mixedCase\n", "markdown": "Variable [InvestUpgradeable.__gap](contracts/src/abstracts/InvestUpgradeable.sol#L460) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L460", "id": "39b17c20d1acb550c46edd53643605406d81055451d6e71f8dadbc102c35c858", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Recoverable_init", "source_mapping": {"start": 813, "length": 167, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [20, 21, 22, 23], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "RecoverableUpgradeable", "source_mapping": {"start": 683, "length": 1460, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53], "starting_column": 1, "ending_column": 2}}, "signature": "__Recoverable_init(address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function RecoverableUpgradeable.__Recoverable_init(address) (contracts/src/abstracts/RecoverableUpgradeable.sol#20-23) is not in mixedCase\n", "markdown": "Function [RecoverableUpgradeable.__Recoverable_init(address)](contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23", "id": "3b18359431ce3cb7c762beadbdd4b30281a1973ed68d43dbce34035f495c8648", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Recoverable_init_unchained", "source_mapping": {"start": 986, "length": 68, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [25], "starting_column": 5, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "contract", "name": "RecoverableUpgradeable", "source_mapping": {"start": 683, "length": 1460, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53], "starting_column": 1, "ending_column": 2}}, "signature": "__Recoverable_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function RecoverableUpgradeable.__Recoverable_init_unchained() (contracts/src/abstracts/RecoverableUpgradeable.sol#25) is not in mixedCase\n", "markdown": "Function [RecoverableUpgradeable.__Recoverable_init_unchained()](contracts/src/abstracts/RecoverableUpgradeable.sol#L25) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L25", "id": "16fcd3be5c944515cabbda9dff407d12863eb14750b71f677853efcbfd3d4685", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 2115, "length": 25, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [52], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "RecoverableUpgradeable", "source_mapping": {"start": 683, "length": 1460, "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable RecoverableUpgradeable.__gap (contracts/src/abstracts/RecoverableUpgradeable.sol#52) is not in mixedCase\n", "markdown": "Variable [RecoverableUpgradeable.__gap](contracts/src/abstracts/RecoverableUpgradeable.sol#L52) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L52", "id": "978da6722f4a3feb709d3065096d662472a25fbc0d01db33d4f192e0f68921cd", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Base_init", "source_mapping": {"start": 1894, "length": 417, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "BaseUpgradeable", "source_mapping": {"start": 923, "length": 2114, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "starting_column": 1, "ending_column": 2}}, "signature": "__Base_init(address,address,address)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function BaseUpgradeable.__Base_init(address,address,address) (contracts/src/abstracts/base/BaseUpgradeable.sol#45-56) is not in mixedCase\n", "markdown": "Function [BaseUpgradeable.__Base_init(address,address,address)](contracts/src/abstracts/base/BaseUpgradeable.sol#L45-L56) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L45-L56", "id": "6a14e2f7c132f3a198686e927414912e270dd5ac6dfd7d47c490c8248d7a6193", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__Base_init_unchained", "source_mapping": {"start": 2317, "length": 61, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [58], "starting_column": 5, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "contract", "name": "BaseUpgradeable", "source_mapping": {"start": 923, "length": 2114, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "starting_column": 1, "ending_column": 2}}, "signature": "__Base_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function BaseUpgradeable.__Base_init_unchained() (contracts/src/abstracts/base/BaseUpgradeable.sol#58) is not in mixedCase\n", "markdown": "Function [BaseUpgradeable.__Base_init_unchained()](contracts/src/abstracts/base/BaseUpgradeable.sol#L58) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L58", "id": "ad87e1cd2a06197f63d7611532d6faccdb8fef175c0d9c96d0369b72e5c73ab8", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 3009, "length": 25, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [72], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "BaseUpgradeable", "source_mapping": {"start": 923, "length": 2114, "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", "is_dependency": false, "lines": [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable BaseUpgradeable.__gap (contracts/src/abstracts/base/BaseUpgradeable.sol#72) is not in mixedCase\n", "markdown": "Variable [BaseUpgradeable.__gap](contracts/src/abstracts/base/BaseUpgradeable.sol#L72) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L72", "id": "13879b2e2030e5b3755771534c7c23865350bcf85817d4f5014ee1d12203bd6a", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC20Base_init", "source_mapping": {"start": 1476, "length": 366, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20BaseUpgradeable", "source_mapping": {"start": 844, "length": 2666, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20Base_init(address,address,address,string,string)"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC20BaseUpgradeable.__ERC20Base_init(address,address,address,string,string) (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#29-39) is not in mixedCase\n", "markdown": "Function [ERC20BaseUpgradeable.__ERC20Base_init(address,address,address,string,string)](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L29-L39) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L29-L39", "id": "fa58b6a55e1dc914384a304a52ec0337484a914570d46ef8e89949c2e741e997", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "function", "name": "__ERC20Base_init_unchained", "source_mapping": {"start": 1848, "length": 66, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [41], "starting_column": 5, "ending_column": 71}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20BaseUpgradeable", "source_mapping": {"start": 844, "length": 2666, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], "starting_column": 1, "ending_column": 2}}, "signature": "__ERC20Base_init_unchained()"}, "additional_fields": {"target": "function", "convention": "mixedCase"}}], "description": "Function ERC20BaseUpgradeable.__ERC20Base_init_unchained() (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#41) is not in mixedCase\n", "markdown": "Function [ERC20BaseUpgradeable.__ERC20Base_init_unchained()](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41", "id": "83ef89c8d2837559dc713d3033bcad6ee3fc0f4bbe9684fc29563b79b14061e2", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "__gap", "source_mapping": {"start": 3482, "length": 25, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [87], "starting_column": 5, "ending_column": 30}, "type_specific_fields": {"parent": {"type": "contract", "name": "ERC20BaseUpgradeable", "source_mapping": {"start": 844, "length": 2666, "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", "is_dependency": false, "lines": [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], "starting_column": 1, "ending_column": 2}}}, "additional_fields": {"target": "variable", "convention": "mixedCase"}}], "description": "Variable ERC20BaseUpgradeable.__gap (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#87) is not in mixedCase\n", "markdown": "Variable [ERC20BaseUpgradeable.__gap](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L87) is not in mixedCase\n", "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L87", "id": "2f8ae02fadfdd7e6c1bd5be25e174621fe450e0c193aa2bd6688a36163ea402c", "check": "naming-convention", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 19674, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [492], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 19575, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [491, 492, 493, 494, 495], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#492)\" inLToken (contracts/src/LToken.sol#32-892)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L492)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", "first_markdown_element": "contracts/src/LToken.sol#L492", "id": "1b204fef3db504bb40630259bb832dd332da5d7cf4fb81ce4f67c0a1d1789ab6", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 19735, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [493], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "withdrawTo", "source_mapping": {"start": 19575, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [491, 492, 493, 494, 495], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "withdrawTo(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#493)\" inLToken (contracts/src/LToken.sol#32-892)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L493)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", "first_markdown_element": "contracts/src/LToken.sol#L493", "id": "1817db5806218f3f43dd1b1a26fa111b5780de76cf24218249dba9c5fb83ac34", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 19876, "length": 7, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [498], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 19777, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [497, 498, 499, 500, 501], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/LToken.sol#498)\" inLToken (contracts/src/LToken.sol#32-892)\n", "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L498)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", "first_markdown_element": "contracts/src/LToken.sol#L498", "id": "acd92932fffc7455463323f1ba4991da39b8f2d4c0071401d4abdff2419678b3", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 19937, "length": 6, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [499], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "depositFor", "source_mapping": {"start": 19777, "length": 196, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [497, 498, 499, 500, 501], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "depositFor(address,uint256)"}}}}, {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/LToken.sol#499)\" inLToken (contracts/src/LToken.sol#32-892)\n", "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L499)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", "first_markdown_element": "contracts/src/LToken.sol#L499", "id": "fc2762bf7a3d04e27f616ce1f19449f2db50ce7eef28af4cfde2d19bf4cb7532", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "newOwner", "source_mapping": {"start": 2661, "length": 8, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [64], "starting_column": 9, "ending_column": 17}, "type_specific_fields": {"parent": {"type": "function", "name": "transferOwnership", "source_mapping": {"start": 2575, "length": 167, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [63, 64, 65, 66], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}, "signature": "transferOwnership(address)"}}}}, {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"newOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#64)\" inGlobalOwnableUpgradeable (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#17-74)\n", "markdown": "Redundant expression \"[newOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L64)\" in[GlobalOwnableUpgradeable](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L17-L74)\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L64", "id": "d86049011c51d3bab8ee6454da574577619f63e0e998c9eb1e719845310150b8", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "account", "source_mapping": {"start": 8192, "length": 7, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [208], "starting_column": 9, "ending_column": 16}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 8089, "length": 190, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [207, 208, 209, 210, 211], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#208)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#33-461)\n", "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L208)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L33-L461)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L208", "id": "6551bd1a28e0191d819a0eed677c7bd45f6052444b2da8e42db718f2211a020f", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "node", "name": "amount", "source_mapping": {"start": 8244, "length": 6, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [209], "starting_column": 9, "ending_column": 15}, "type_specific_fields": {"parent": {"type": "function", "name": "_distributeRewards", "source_mapping": {"start": 8089, "length": 190, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [207, 208, 209, 210, 211], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}, "signature": "_distributeRewards(address,uint256)"}}}}, {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}], "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#209)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#33-461)\n", "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L209)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L33-L461)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L209", "id": "369af39d0f52b4b692283217c17c764fdc5e2f669a6cff5205f5555d0163ceff", "check": "redundant-statements", "impact": "Informational", "confidence": "High"}, {"elements": [{"type": "variable", "name": "rewardsRedirectsFromTo", "source_mapping": {"start": 3035, "length": 57, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [69], "starting_column": 5, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "rewardsRedirectsToFrom", "source_mapping": {"start": 3098, "length": 59, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [70], "starting_column": 5, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "contract", "name": "InvestUpgradeable", "source_mapping": {"start": 1614, "length": 18341, "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461], "starting_column": 1, "ending_column": 2}}}}], "description": "Variable InvestUpgradeable.rewardsRedirectsFromTo (contracts/src/abstracts/InvestUpgradeable.sol#69) is too similar to InvestUpgradeable.rewardsRedirectsToFrom (contracts/src/abstracts/InvestUpgradeable.sol#70)\n", "markdown": "Variable [InvestUpgradeable.rewardsRedirectsFromTo](contracts/src/abstracts/InvestUpgradeable.sol#L69) is too similar to [InvestUpgradeable.rewardsRedirectsToFrom](contracts/src/abstracts/InvestUpgradeable.sol#L70)\n", "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L69", "id": "83369d2643084df5774b1e62f1c2c29996ed0f4f3c4ae6ec7248fdcd2f1dd45b", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "unlockFeesRateUD7x3_", "source_mapping": {"start": 9099, "length": 25, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [215], "starting_column": 32, "ending_column": 57}, "type_specific_fields": {"parent": {"type": "function", "name": "setUnlockFeesRate", "source_mapping": {"start": 9072, "length": 126, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [215, 216, 217], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "setUnlockFeesRate(uint32)"}}}}, {"type": "variable", "name": "unlockFeesRateSUD", "source_mapping": {"start": 10672, "length": 59, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [257], "starting_column": 9, "ending_column": 68}, "type_specific_fields": {"parent": {"type": "function", "name": "unlock", "source_mapping": {"start": 10154, "length": 1001, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LDYStaking", "source_mapping": {"start": 1294, "length": 17482, "filename_relative": "contracts/src/LDYStaking.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", "filename_short": "contracts/src/LDYStaking.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472], "starting_column": 1, "ending_column": 2}}, "signature": "unlock()"}}}}], "description": "Variable LDYStaking.setUnlockFeesRate(uint32).unlockFeesRateUD7x3_ (contracts/src/LDYStaking.sol#215) is too similar to LDYStaking.unlock().unlockFeesRateSUD (contracts/src/LDYStaking.sol#257)\n", "markdown": "Variable [LDYStaking.setUnlockFeesRate(uint32).unlockFeesRateUD7x3_](contracts/src/LDYStaking.sol#L215) is too similar to [LDYStaking.unlock().unlockFeesRateSUD](contracts/src/LDYStaking.sol#L257)\n", "first_markdown_element": "contracts/src/LDYStaking.sol#L215", "id": "1ee9e89393d764a44602f5032ba013f16dfc65ee6a4da023f339b417b8e59e64", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "feesRateUD7x3_", "source_mapping": {"start": 7768, "length": 19, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [208], "starting_column": 26, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "function", "name": "setFeesRate", "source_mapping": {"start": 7747, "length": 102, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [208, 209, 210], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setFeesRate(uint32)"}}}}, {"type": "variable", "name": "feesRateSUD", "source_mapping": {"start": 21665, "length": 47, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [541], "starting_column": 9, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "getWithdrawnAmountAndFees", "source_mapping": {"start": 21235, "length": 637, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "getWithdrawnAmountAndFees(address,uint256)"}}}}], "description": "Variable LToken.setFeesRate(uint32).feesRateUD7x3_ (contracts/src/LToken.sol#208) is too similar to LToken.getWithdrawnAmountAndFees(address,uint256).feesRateSUD (contracts/src/LToken.sol#541)\n", "markdown": "Variable [LToken.setFeesRate(uint32).feesRateUD7x3_](contracts/src/LToken.sol#L208) is too similar to [LToken.getWithdrawnAmountAndFees(address,uint256).feesRateSUD](contracts/src/LToken.sol#L541)\n", "first_markdown_element": "contracts/src/LToken.sol#L208", "id": "0bc263268cae7eb8a9cd709439a1f79930eab1e6b3e87629df9fbf58af54069b", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "retentionRateUD7x3_", "source_mapping": {"start": 8226, "length": 24, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [219], "starting_column": 31, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "setRetentionRate", "source_mapping": {"start": 8200, "length": 185, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [219, 220, 221, 222], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "setRetentionRate(uint32)"}}}}, {"type": "variable", "name": "retentionRateSUD", "source_mapping": {"start": 18110, "length": 57, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [458], "starting_column": 9, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "getExpectedRetained", "source_mapping": {"start": 17969, "length": 351, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [456, 457, 458, 459, 460, 461], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LToken", "source_mapping": {"start": 1551, "length": 34258, "filename_relative": "contracts/src/LToken.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", "filename_short": "contracts/src/LToken.sol", "is_dependency": false, "lines": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892], "starting_column": 1, "ending_column": 2}}, "signature": "getExpectedRetained()"}}}}], "description": "Variable LToken.setRetentionRate(uint32).retentionRateUD7x3_ (contracts/src/LToken.sol#219) is too similar to LToken.getExpectedRetained().retentionRateSUD (contracts/src/LToken.sol#458)\n", "markdown": "Variable [LToken.setRetentionRate(uint32).retentionRateUD7x3_](contracts/src/LToken.sol#L219) is too similar to [LToken.getExpectedRetained().retentionRateSUD](contracts/src/LToken.sol#L458)\n", "first_markdown_element": "contracts/src/LToken.sol#L219", "id": "d3ff7ac0ce4a0ffd372a3c4db5e6f58005891819bac9a91fe3a325cb93c5e8a7", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_globalOwner", "source_mapping": {"start": 944, "length": 32, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [22], "starting_column": 5, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "globalOwner_", "source_mapping": {"start": 1299, "length": 20, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [30], "starting_column": 35, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "__GlobalOwnable_init", "source_mapping": {"start": 1269, "length": 382, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [30, 31, 32, 33, 34, 35], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalOwnable_init(address)"}}}}], "description": "Variable GlobalOwnableUpgradeable._globalOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#22) is too similar to GlobalOwnableUpgradeable.__GlobalOwnable_init(address).globalOwner_ (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#30)\n", "markdown": "Variable [GlobalOwnableUpgradeable._globalOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22) is too similar to [GlobalOwnableUpgradeable.__GlobalOwnable_init(address).globalOwner_](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L30)\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22", "id": "35d95939e7a1d690bebe05c460d057e7c8169c241957bade0a15b3993664f866", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_globalOwner", "source_mapping": {"start": 944, "length": 32, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [22], "starting_column": 5, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "globalOwner_", "source_mapping": {"start": 1697, "length": 20, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [37], "starting_column": 45, "ending_column": 65}, "type_specific_fields": {"parent": {"type": "function", "name": "__GlobalOwnable_init_unchained", "source_mapping": {"start": 1657, "length": 145, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [37, 38, 39], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalOwnableUpgradeable", "source_mapping": {"start": 743, "length": 2292, "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalOwnable_init_unchained(address)"}}}}], "description": "Variable GlobalOwnableUpgradeable._globalOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#22) is too similar to GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address).globalOwner_ (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#37)\n", "markdown": "Variable [GlobalOwnableUpgradeable._globalOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22) is too similar to [GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address).globalOwner_](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L37)\n", "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22", "id": "65f8b5fae3b7b419bd45fae647db8b6555f1e93fbb10571fcb07c57984651584", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_globalPause", "source_mapping": {"start": 980, "length": 32, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [22], "starting_column": 5, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "globalPause_", "source_mapping": {"start": 1336, "length": 20, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [30], "starting_column": 36, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "__GlobalPausable_init", "source_mapping": {"start": 1305, "length": 168, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [30, 31, 32, 33], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalPausable_init(address)"}}}}], "description": "Variable GlobalPausableUpgradeable._globalPause (contracts/src/abstracts/GlobalPausableUpgradeable.sol#22) is too similar to GlobalPausableUpgradeable.__GlobalPausable_init(address).globalPause_ (contracts/src/abstracts/GlobalPausableUpgradeable.sol#30)\n", "markdown": "Variable [GlobalPausableUpgradeable._globalPause](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22) is too similar to [GlobalPausableUpgradeable.__GlobalPausable_init(address).globalPause_](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30)\n", "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22", "id": "52ed3e556bd1e798419746c5e7e355ff41d74819815b8aeec53b7f16a81e2bd6", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_globalPause", "source_mapping": {"start": 980, "length": 32, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [22], "starting_column": 5, "ending_column": 37}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "globalPause_", "source_mapping": {"start": 1520, "length": 20, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [35], "starting_column": 46, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "function", "name": "__GlobalPausable_init_unchained", "source_mapping": {"start": 1479, "length": 146, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [35, 36, 37], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalPausableUpgradeable", "source_mapping": {"start": 777, "length": 1702, "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalPausable_init_unchained(address)"}}}}], "description": "Variable GlobalPausableUpgradeable._globalPause (contracts/src/abstracts/GlobalPausableUpgradeable.sol#22) is too similar to GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address).globalPause_ (contracts/src/abstracts/GlobalPausableUpgradeable.sol#35)\n", "markdown": "Variable [GlobalPausableUpgradeable._globalPause](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22) is too similar to [GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address).globalPause_](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L35)\n", "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22", "id": "c4e25573e3fa25856a5db3e0745dcb793eb01fba66bb4066eec8aef130b020f9", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_globalBlacklist", "source_mapping": {"start": 907, "length": 40, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [19], "starting_column": 5, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "globalBlacklist_", "source_mapping": {"start": 1456, "length": 24, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [31], "starting_column": 50, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "__GlobalRestrictable_init_unchained", "source_mapping": {"start": 1411, "length": 166, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [31, 32, 33], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalRestrictable_init_unchained(address)"}}}}], "description": "Variable GlobalRestrictableUpgradeable._globalBlacklist (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#19) is too similar to GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address).globalBlacklist_ (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#31)\n", "markdown": "Variable [GlobalRestrictableUpgradeable._globalBlacklist](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19) is too similar to [GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address).globalBlacklist_](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L31)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19", "id": "798d95cd713a837f5c401fbbc2dacc685874f0e2101ef052c17a8b9f9c724843", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_globalBlacklist", "source_mapping": {"start": 907, "length": 40, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [19], "starting_column": 5, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}}}, {"type": "variable", "name": "globalBlacklist_", "source_mapping": {"start": 1283, "length": 24, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [27], "starting_column": 40, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "__GlobalRestrictable_init", "source_mapping": {"start": 1248, "length": 157, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [27, 28, 29], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GlobalRestrictableUpgradeable", "source_mapping": {"start": 793, "length": 2013, "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", "is_dependency": false, "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "__GlobalRestrictable_init(address)"}}}}], "description": "Variable GlobalRestrictableUpgradeable._globalBlacklist (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#19) is too similar to GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address).globalBlacklist_ (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#27)\n", "markdown": "Variable [GlobalRestrictableUpgradeable._globalBlacklist](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19) is too similar to [GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address).globalBlacklist_](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27)\n", "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19", "id": "febf0885d6b472b2c94ce7cf14518f688845057b92a7bf549fb8d48ef2eecfb8", "check": "similar-names", "impact": "Informational", "confidence": "Medium"}] \ No newline at end of file +[ + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10525, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)", + "source_mapping": { + "start": 10958, + "length": 89, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [269], + "starting_column": 9, + "ending_column": 98 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10525, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", + "source_mapping": { + "start": 11179, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [273], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10525, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#258-279) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d) (contracts/src/abstracts/InvestUpgradeable.sol#269)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#273)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L258-L279) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)](contracts/src/abstracts/InvestUpgradeable.sol#L269)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L273)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L258-L279", + "id": "837ac7a6a8e8bb10145a855bbb3b2bb1e17032f56c23cffeb8c2e84e7aa42fc6", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10525, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", + "source_mapping": { + "start": 11179, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [273], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10525, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)", + "source_mapping": { + "start": 11369, + "length": 74, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [277], + "starting_column": 9, + "ending_column": 83 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10525, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#258-279) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#273)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d) (contracts/src/abstracts/InvestUpgradeable.sol#277)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L258-L279) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L273)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)](contracts/src/abstracts/InvestUpgradeable.sol#L277)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L258-L279", + "id": "7328cf6c14e774619c3e88720bfbdb1dad7e658c4fffc3f7ff22d6a9bebc055e", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17747, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18314, + "length": 68, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [417], + "starting_column": 13, + "ending_column": 81 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17747, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#409-444) uses a dangerous strict equality:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#417)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L409-L444) uses a dangerous strict equality:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L417)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L409-L444", + "id": "8cbaf27ca32165ef672a505abcf410858caaf63e3bfb61ca4259a5aec3971107", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_isClaiming", + "source_mapping": { + "start": 3810, + "length": 24, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [88], + "starting_column": 5, + "ending_column": 29 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = true", + "source_mapping": { + "start": 19051, + "length": 18, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [434], + "starting_column": 13, + "ending_column": 31 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17747, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = false", + "source_mapping": { + "start": 19152, + "length": 19, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [436], + "starting_column": 13, + "ending_column": 32 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17747, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#88) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#434)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#436)\n", + "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L88) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L434)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L436)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L88", + "id": "25837e9ca3a7500571073e3e39f0c7471fc9f72107c4c0280839400c874ffefa", + "check": "write-after-write", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11867, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [296, 297, 298, 299, 300, 301, 302], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + }, + { + "type": "node", + "name": "withdrawer = withdrawer_", + "source_mapping": { + "start": 12136, + "length": 24, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [301], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11867, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [296, 297, 298, 299, 300, 301, 302], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + } + } + } + ], + "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#296-302) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#301) \n", + "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L296-L302) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L301) \n", + "first_markdown_element": "contracts/src/LToken.sol#L296-L302", + "id": "625d3676f2a66d053207d6550074361bcf291dc08d5883717dfe47a75eae4f43", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12300, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [308, 309, 310, 311, 312, 313, 314], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + }, + { + "type": "node", + "name": "fund = fund_", + "source_mapping": { + "start": 12542, + "length": 12, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [313], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12300, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [308, 309, 310, 311, 312, 313, 314], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + } + } + } + ], + "description": "LToken.setFund(address) (contracts/src/LToken.sol#308-314) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#313) \n", + "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L308-L314) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L313) \n", + "first_markdown_element": "contracts/src/LToken.sol#L308-L314", + "id": "f3bc101edb5e26995222fe505f1dc0208c90fe525c666554e266478f58dd39d8", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10784, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [269, 270, 271], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "feesRateUD7x3 = feesRateUD7x3_", + "source_mapping": { + "start": 10855, + "length": 30, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [270], + "starting_column": 9, + "ending_column": 39 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10784, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [269, 270, 271], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + } + ], + "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#269-271) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#270) \n", + "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L269-L271) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L270) \n", + "first_markdown_element": "contracts/src/LToken.sol#L269-L271", + "id": "e92fbf70ede64c48fe16c5ec116fd98951f676a72c04542046473ad50c05713e", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11232, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [279, 280, 281, 282], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + }, + { + "type": "node", + "name": "retentionRateUD7x3 = retentionRateUD7x3_", + "source_mapping": { + "start": 11386, + "length": 40, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [281], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11232, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [279, 280, 281, 282], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + } + ], + "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#279-282) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#281) \n", + "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L279-L282) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L281) \n", + "first_markdown_element": "contracts/src/LToken.sol#L279-L282", + "id": "5fd922d632eb570c72c19b92edf9234802f24cf4c8ed15c8c5b5c2e9c8bf4b56", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "isBlacklisted", + "source_mapping": { + "start": 2571, + "length": 132, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [68, 69, 70], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 890, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "isBlacklisted(address)" + } + }, + { + "type": "node", + "name": "_globalBlacklist.isBlacklisted(account)", + "source_mapping": { + "start": 2650, + "length": 46, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [69], + "starting_column": 9, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "isBlacklisted", + "source_mapping": { + "start": 2571, + "length": 132, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [68, 69, 70], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 890, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "isBlacklisted(address)" + } + } + } + } + ], + "description": "GlobalRestrictableUpgradeable.isBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#68-70) has external calls inside a loop: _globalBlacklist.isBlacklisted(account) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#69)\n", + "markdown": "[GlobalRestrictableUpgradeable.isBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L68-L70) has external calls inside a loop: [_globalBlacklist.isBlacklisted(account)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L69)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L68-L70", + "id": "0285e3d5aa98a28122a5d7624a14a96c6eee44b58b54658687a5e2b342e157b3", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "decimalsOf", + "source_mapping": { + "start": 4219, + "length": 157, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [82, 83, 84], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "SUD", + "source_mapping": { + "start": 3953, + "length": 3844, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [ + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "decimalsOf(address)" + } + }, + { + "type": "node", + "name": "IERC20MetadataUpgradeable(tokenAddress).decimals()", + "source_mapping": { + "start": 4312, + "length": 57, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [83], + "starting_column": 9, + "ending_column": 66 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "decimalsOf", + "source_mapping": { + "start": 4219, + "length": 157, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [82, 83, 84], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "SUD", + "source_mapping": { + "start": 3953, + "length": 3844, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [ + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "decimalsOf(address)" + } + } + } + } + ], + "description": "SUD.decimalsOf(address) (contracts/src/libs/SUD.sol#82-84) has external calls inside a loop: IERC20MetadataUpgradeable(tokenAddress).decimals() (contracts/src/libs/SUD.sol#83)\n", + "markdown": "[SUD.decimalsOf(address)](contracts/src/libs/SUD.sol#L82-L84) has external calls inside a loop: [IERC20MetadataUpgradeable(tokenAddress).decimals()](contracts/src/libs/SUD.sol#L83)\n", + "first_markdown_element": "contracts/src/libs/SUD.sol#L82-L84", + "id": "2ef4e42ca875343923b559ebd74f8b93e458135c224ca543a0be7afbe8c972ee", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24639, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + }, + { + "type": "node", + "name": "ldyStaking.tierOf(account) >= 2", + "source_mapping": { + "start": 24880, + "length": 31, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [604], + "starting_column": 13, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24639, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#599-617) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#604)\n", + "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L599-L617) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L604)\n", + "first_markdown_element": "contracts/src/LToken.sol#L599-L617", + "id": "b36a651b8a7e1aa6949522b1bcf7e762a3985cc13393b17fbea6861534d6fef4", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "underlying().safeTransfer(request.account,withdrawnAmount)", + "source_mapping": { + "start": 34190, + "length": 59, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [825], + "starting_column": 17, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))", + "source_mapping": { + "start": 32058, + "length": 308, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [773, 774, 775, 776, 777, 778, 779, 780, 781], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)", + "source_mapping": { + "start": 33359, + "length": 289, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [806, 807, 808, 809, 810, 811, 812, 813, 814], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + } + ], + "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#825)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length)) (contracts/src/LToken.sol#773-781)\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID) (contracts/src/LToken.sol#806-814)\n", + "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L825)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))](contracts/src/LToken.sol#L773-L781)\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)](contracts/src/LToken.sol#L806-L814)\n", + "first_markdown_element": "contracts/src/LToken.sol#L736-L847", + "id": "25641a1536005499f5fd91ee9c43ed2fe71583aad1cb18782da427ee15d0843d", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17747, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18314, + "length": 68, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [417], + "starting_column": 13, + "ending_column": 81 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17747, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#409-444) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#417)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L409-L444) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L417)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L409-L444", + "id": "6c49708455669adb75db0149ef062a23944bbc6888c309816a301d9bcafcc62a", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "notBlacklisted", + "source_mapping": { + "start": 2251, + "length": 115, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [58, 59, 60, 61], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 890, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "notBlacklisted(address)" + } + }, + { + "type": "node", + "name": "require(bool,string)(isBlacklisted(account) == false,L9)", + "source_mapping": { + "start": 2302, + "length": 46, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [59], + "starting_column": 9, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "notBlacklisted", + "source_mapping": { + "start": 2251, + "length": 115, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [58, 59, 60, 61], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 890, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "notBlacklisted(address)" + } + } + } + } + ], + "description": "GlobalRestrictableUpgradeable.notBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#58-61) compares to a boolean constant:\n\t-require(bool,string)(isBlacklisted(account) == false,L9) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#59)\n", + "markdown": "[GlobalRestrictableUpgradeable.notBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L61) compares to a boolean constant:\n\t-[require(bool,string)(isBlacklisted(account) == false,L9)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L59)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L61", + "id": "f16fec669c66f677dbc6a70cef67c51cb63c39c9231d6af42ace039cc125bdb8", + "check": "boolean-equal", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31522, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [763], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#763)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L763)\n", + "first_markdown_element": "contracts/src/LToken.sol#L736-L847", + "id": "9df05006eba73fa3355e40d39323dec9d4149e5589ee1aab775d6e57c2ebd4c0", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 32430, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [784], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#784)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L784)\n", + "first_markdown_element": "contracts/src/LToken.sol#L736-L847", + "id": "17aa185ced928455cb5b607b542dd76f8f4cc9705fb94e166c47b2df1432d536", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 33712, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [817], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30085, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#736-847) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#817)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L736-L847) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L817)\n", + "first_markdown_element": "contracts/src/LToken.sol#L736-L847", + "id": "fa620a3555265f1ce1df3715e5f94fd62d220b1942b40737b24858d749798199", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9719, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [241, 242, 243, 244, 245], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + ], + "description": "InvestUpgradeable._distributeRewards(address,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#241-245) is never used and should be removed\n", + "markdown": "[InvestUpgradeable._distributeRewards(address,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L241-L245) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L241-L245", + "id": "4ce5597a49ce11c0d0e1fdbd9adaef136a31a232eff135fedab3b33cff3f3996", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "toInt", + "source_mapping": { + "start": 7477, + "length": 318, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [162, 163, 164, 165, 166, 167, 168], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "SUD", + "source_mapping": { + "start": 3953, + "length": 3844, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [ + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "toInt(uint256,uint256)" + } + } + ], + "description": "SUD.toInt(uint256,uint256) (contracts/src/libs/SUD.sol#162-168) is never used and should be removed\n", + "markdown": "[SUD.toInt(uint256,uint256)](contracts/src/libs/SUD.sol#L162-L168) is never used and should be removed\n", + "first_markdown_element": "contracts/src/libs/SUD.sol#L162-L168", + "id": "38b5c05a1f70a50973749339bd7f6ce4ece3f42a379057b9bcaed504a5b11599", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27940, + "length": 1895, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, + 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, + 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, + 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 29745, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [727], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27940, + "length": 1895, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#675-729):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#727)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L675-L729):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L727)\n", + "first_markdown_element": "contracts/src/LToken.sol#L675-L729", + "id": "e3d29d366ad1b4a64677a5a5b95da44d95591c957fb06f94687115b1d6222d28", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 22923, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [548], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22824, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [547, 548, 549, 550, 551], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, + 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, + 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#548)\" inLToken (contracts/src/LToken.sol#57-1003)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L548)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", + "first_markdown_element": "contracts/src/LToken.sol#L548", + "id": "b10bf22e5a95b25b2ca053ed16988f894b3cf456f256005de2029e07dd150f33", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 22984, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [549], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22824, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [547, 548, 549, 550, 551], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, + 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, + 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#549)\" inLToken (contracts/src/LToken.sol#57-1003)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L549)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", + "first_markdown_element": "contracts/src/LToken.sol#L549", + "id": "8976b44a250d3a3c00a06a2e2a81c4a1b920f03acedc22b2b270296f522aaa32", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 23301, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [559], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23202, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [558, 559, 560, 561, 562], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, + 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, + 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#559)\" inLToken (contracts/src/LToken.sol#57-1003)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L559)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", + "first_markdown_element": "contracts/src/LToken.sol#L559", + "id": "4dca8a634600c9bd68f1fcc283c628cc82869f305b84dcc67ef831f37a375ee2", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 23362, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [560], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23202, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [558, 559, 560, 561, 562], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2929, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, + 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, + 1003 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#560)\" inLToken (contracts/src/LToken.sol#57-1003)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L560)\" in[LToken](contracts/src/LToken.sol#L57-L1003)\n", + "first_markdown_element": "contracts/src/LToken.sol#L560", + "id": "7d12381b7d038575e3ab1580c7591a8e3451356288a22633713ded811885dc88", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "newOwner", + "source_mapping": { + "start": 2898, + "length": 8, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [70], + "starting_column": 9, + "ending_column": 17 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "transferOwnership", + "source_mapping": { + "start": 2812, + "length": 167, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [69, 70, 71, 72], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 952, + "length": 2603, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "transferOwnership(address)" + } + } + } + }, + { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 952, + "length": 2603, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"newOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#70)\" inGlobalOwnableUpgradeable (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#24-88)\n", + "markdown": "Redundant expression \"[newOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L70)\" in[GlobalOwnableUpgradeable](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L24-L88)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L70", + "id": "b15122e2e76997cd89b2eda286a279686178679382e4696c7cb5b756091209a2", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 9822, + "length": 7, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [242], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9719, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [241, 242, 243, 244, 245], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#242)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#50-452)\n", + "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L242)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L50-L452)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L242", + "id": "4327808fdf1909bf374d32bad0df0fa5fc266916511b21230857c9fd952f389d", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 9875, + "length": 6, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [243], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9719, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [241, 242, 243, 244, 245], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2319, + "length": 17456, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/Users/lilarest/pows.nosync/Ledgity/repos/LedgityYield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#243)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#50-452)\n", + "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L243)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L50-L452)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L243", + "id": "ea7adefce3b89bca037df83b3cf6b48a21e6399d6fc1cfc71e5a3fb135b590d6", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "underlyingToken.safeTransfer(unlockAccount,unlockAmount)", + "source_mapping": { + "start": 16610, + "length": 57, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [406], + "starting_column": 17, + "ending_column": 74 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "delete unlockRequests[processedId]", + "source_mapping": { + "start": 16502, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [403], + "starting_column": 17, + "ending_column": 51 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "unlockRequests" + } + }, + { + "type": "node", + "name": "unlockRequestsCursor = processedId", + "source_mapping": { + "start": 16820, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [414], + "starting_column": 9, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "unlockRequestsCursor" + } + } + ], + "description": "Reentrancy in PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415):\n\tExternal calls:\n\t- underlyingToken.safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#406)\n\tState variables written after the call(s):\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#403)\n\tPreMining.unlockRequests (contracts/src/PreMining.sol#108) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415)\n\t- PreMining.requestUnlock() (contracts/src/PreMining.sol#368-375)\n\t- PreMining.unlockRequests (contracts/src/PreMining.sol#108)\n\t- unlockRequestsCursor = processedId (contracts/src/PreMining.sol#414)\n\tPreMining.unlockRequestsCursor (contracts/src/PreMining.sol#111) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415)\n\t- PreMining.unlockRequestsCursor (contracts/src/PreMining.sol#111)\n", + "markdown": "Reentrancy in [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415):\n\tExternal calls:\n\t- [underlyingToken.safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L406)\n\tState variables written after the call(s):\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L403)\n\t[PreMining.unlockRequests](contracts/src/PreMining.sol#L108) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415)\n\t- [PreMining.requestUnlock()](contracts/src/PreMining.sol#L368-L375)\n\t- [PreMining.unlockRequests](contracts/src/PreMining.sol#L108)\n\t- [unlockRequestsCursor = processedId](contracts/src/PreMining.sol#L414)\n\t[PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L111) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415)\n\t- [PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L111)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L381-L415", + "id": "9a6cb6e9f5e0d280f4c1853f9519dac80e799c5c7adca3cf424917f988730076", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "underlyingToken.balanceOf(address(this)) < unlockAmount", + "source_mapping": { + "start": 16383, + "length": 55, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [400], + "starting_column": 21, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415) has external calls inside a loop: underlyingToken.balanceOf(address(this)) < unlockAmount (contracts/src/PreMining.sol#400)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415) has external calls inside a loop: [underlyingToken.balanceOf(address(this)) < unlockAmount](contracts/src/PreMining.sol#L400)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L381-L415", + "id": "861f8eb02cb47daafe61a2e41d4d485f3912ddabe2a89211ddd1778c600a216d", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 8662, + "length": 1443, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + }, + { + "type": "node", + "name": "require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)", + "source_mapping": { + "start": 9398, + "length": 56, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [240], + "starting_column": 9, + "ending_column": 65 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 8662, + "length": 1443, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)", + "source_mapping": { + "start": 9960, + "length": 56, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [251], + "starting_column": 9, + "ending_column": 65 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 8662, + "length": 1443, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + } + } + } + ], + "description": "PreMining.startRecoveryPhase() (contracts/src/PreMining.sol#224-255) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(block.timestamp >= afterVestingTimestamp,L80) (contracts/src/PreMining.sol#240)\n\t- require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81) (contracts/src/PreMining.sol#251)\n", + "markdown": "[PreMining.startRecoveryPhase()](contracts/src/PreMining.sol#L224-L255) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)](contracts/src/PreMining.sol#L240)\n\t- [require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)](contracts/src/PreMining.sol#L251)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L224-L255", + "id": "1f2f5039918968476f793f25a7d63de91a06b20221717b90e5860d7f4470d09c", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 17178, + "length": 902, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + }, + { + "type": "node", + "name": "elapsedTime > vestingInSeconds", + "source_mapping": { + "start": 17686, + "length": 30, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [432], + "starting_column": 13, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 17178, + "length": 902, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + } + } + } + ], + "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#423-439) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- elapsedTime > vestingInSeconds (contracts/src/PreMining.sol#432)\n", + "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L423-L439) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [elapsedTime > vestingInSeconds](contracts/src/PreMining.sol#L432)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L423-L439", + "id": "7112e5ff225ea1c26841de0afa9fb9344b110c059de80dda1bd559f8cfb52e0c", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "delete unlockRequests[processedId]", + "source_mapping": { + "start": 16502, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [403], + "starting_column": 17, + "ending_column": 51 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 15459, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1812, + "length": 16819, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#381-415) has costly operations inside a loop:\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#403)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L381-L415) has costly operations inside a loop:\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L403)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L381-L415", + "id": "16d29ef13ec25c1a2abfc852b098e6fa21dceb5d857f3925a1e6c5c85cd27f84", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "underlyingToken.safeTransfer(unlockAccount,unlockAmount)", + "source_mapping": { + "start": 18092, + "length": 57, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [436], + "starting_column": 17, + "ending_column": 74 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "delete unlockRequests[processedId]", + "source_mapping": { + "start": 17984, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [433], + "starting_column": 17, + "ending_column": 51 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "unlockRequests" + } + }, + { + "type": "node", + "name": "unlockRequestsCursor = processedId", + "source_mapping": { + "start": 18302, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [444], + "starting_column": 9, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "unlockRequestsCursor" + } + } + ], + "description": "Reentrancy in PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445):\n\tExternal calls:\n\t- underlyingToken.safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#436)\n\tState variables written after the call(s):\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#433)\n\tPreMining.unlockRequests (contracts/src/PreMining.sol#115) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445)\n\t- PreMining.requestUnlock() (contracts/src/PreMining.sol#398-405)\n\t- PreMining.unlockRequests (contracts/src/PreMining.sol#115)\n\t- unlockRequestsCursor = processedId (contracts/src/PreMining.sol#444)\n\tPreMining.unlockRequestsCursor (contracts/src/PreMining.sol#118) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445)\n\t- PreMining.unlockRequestsCursor (contracts/src/PreMining.sol#118)\n", + "markdown": "Reentrancy in [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445):\n\tExternal calls:\n\t- [underlyingToken.safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L436)\n\tState variables written after the call(s):\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L433)\n\t[PreMining.unlockRequests](contracts/src/PreMining.sol#L115) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445)\n\t- [PreMining.requestUnlock()](contracts/src/PreMining.sol#L398-L405)\n\t- [PreMining.unlockRequests](contracts/src/PreMining.sol#L115)\n\t- [unlockRequestsCursor = processedId](contracts/src/PreMining.sol#L444)\n\t[PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L118) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445)\n\t- [PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L118)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L411-L445", + "id": "883510f269d1f3304c617ceef940f58384c77ae8819538bc98ecd065b9e4cf59", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "underlyingToken.balanceOf(address(this)) < unlockAmount", + "source_mapping": { + "start": 17865, + "length": 55, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [430], + "starting_column": 21, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445) has external calls inside a loop: underlyingToken.balanceOf(address(this)) < unlockAmount (contracts/src/PreMining.sol#430)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445) has external calls inside a loop: [underlyingToken.balanceOf(address(this)) < unlockAmount](contracts/src/PreMining.sol#L430)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L411-L445", + "id": "d37a26a87b3db62be9ea37a93cd077a3659871f2168423f9c8d5fd2e889882e2", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 9035, + "length": 1464, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + }, + { + "type": "node", + "name": "require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)", + "source_mapping": { + "start": 9792, + "length": 56, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [252], + "starting_column": 9, + "ending_column": 65 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 9035, + "length": 1464, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)", + "source_mapping": { + "start": 10354, + "length": 56, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [263], + "starting_column": 9, + "ending_column": 65 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 9035, + "length": 1464, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + } + } + } + ], + "description": "PreMining.startRecoveryPhase() (contracts/src/PreMining.sol#236-267) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(block.timestamp >= afterVestingTimestamp,L80) (contracts/src/PreMining.sol#252)\n\t- require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81) (contracts/src/PreMining.sol#263)\n", + "markdown": "[PreMining.startRecoveryPhase()](contracts/src/PreMining.sol#L236-L267) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(block.timestamp >= afterVestingTimestamp,L80)](contracts/src/PreMining.sol#L252)\n\t- [require(bool,string)(block.timestamp >= afterMaxLockTimestamp,L81)](contracts/src/PreMining.sol#L263)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L236-L267", + "id": "a6eaeb609b68e62bbd34c915475c3897dd4b6c20a96987a44641673b1c050beb", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18660, + "length": 915, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + }, + { + "type": "node", + "name": "elapsedTime > vestingInSeconds", + "source_mapping": { + "start": 19181, + "length": 30, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [462], + "starting_column": 13, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18660, + "length": 915, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + } + } + } + ], + "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#453-469) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- elapsedTime > vestingInSeconds (contracts/src/PreMining.sol#462)\n", + "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L453-L469) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [elapsedTime > vestingInSeconds](contracts/src/PreMining.sol#L462)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L453-L469", + "id": "83005110927ad67b68aa0b369db3e0aa9f212851680ef48c3e26ef5fecef52fa", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "delete unlockRequests[processedId]", + "source_mapping": { + "start": 17984, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [433], + "starting_column": 17, + "ending_column": 51 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16941, + "length": 1402, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18251, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#411-445) has costly operations inside a loop:\n\t- delete unlockRequests[processedId] (contracts/src/PreMining.sol#433)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L411-L445) has costly operations inside a loop:\n\t- [delete unlockRequests[processedId]](contracts/src/PreMining.sol#L433)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L411-L445", + "id": "39b3316d01f658c3a0d45a6a7ecd218085928361983ae51427e424ef11eed450", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18160, + "length": 1341, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + }, + { + "type": "node", + "name": "elapsedMonthsS3 = (elapsedTimeS3 * 10 ** 3) / ONE_MONTH_IN_SECONDS_S3", + "source_mapping": { + "start": 18671, + "length": 77, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [441], + "starting_column": 9, + "ending_column": 86 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18160, + "length": 1341, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + } + } + }, + { + "type": "node", + "name": "totalAvailableToClaim = (totalEligibleRewards * elapsedMonthsS3) / rewardsVestingS3", + "source_mapping": { + "start": 18903, + "length": 91, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [445], + "starting_column": 9, + "ending_column": 100 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18160, + "length": 1341, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + } + } + } + ], + "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#433-455) performs a multiplication on the result of a division:\n\t- elapsedMonthsS3 = (elapsedTimeS3 * 10 ** 3) / ONE_MONTH_IN_SECONDS_S3 (contracts/src/PreMining.sol#441)\n\t- totalAvailableToClaim = (totalEligibleRewards * elapsedMonthsS3) / rewardsVestingS3 (contracts/src/PreMining.sol#445)\n", + "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L433-L455) performs a multiplication on the result of a division:\n\t- [elapsedMonthsS3 = (elapsedTimeS3 * 10 ** 3) / ONE_MONTH_IN_SECONDS_S3](contracts/src/PreMining.sol#L441)\n\t- [totalAvailableToClaim = (totalEligibleRewards * elapsedMonthsS3) / rewardsVestingS3](contracts/src/PreMining.sol#L445)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L433-L455", + "id": "4ae4ee988a25ad7832b51cd99ae8a1ebc31145dcf42ca2d5d7fddb83855df669", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)", + "source_mapping": { + "start": 17571, + "length": 78, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [416], + "starting_column": 17, + "ending_column": 95 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "delete unlockRequests[unlockRequestsCursor]", + "source_mapping": { + "start": 17454, + "length": 43, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [413], + "starting_column": 17, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "unlockRequests" + } + }, + { + "type": "node", + "name": "unlockRequestsCursor = processedId", + "source_mapping": { + "start": 17802, + "length": 34, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [424], + "starting_column": 9, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "unlockRequestsCursor" + } + } + ], + "description": "Reentrancy in PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425):\n\tExternal calls:\n\t- IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#416)\n\tState variables written after the call(s):\n\t- delete unlockRequests[unlockRequestsCursor] (contracts/src/PreMining.sol#413)\n\tPreMining.unlockRequests (contracts/src/PreMining.sol#112) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425)\n\t- PreMining.requestUnlock() (contracts/src/PreMining.sol#375-382)\n\t- unlockRequestsCursor = processedId (contracts/src/PreMining.sol#424)\n\tPreMining.unlockRequestsCursor (contracts/src/PreMining.sol#115) can be used in cross function reentrancies:\n\t- PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425)\n", + "markdown": "Reentrancy in [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425):\n\tExternal calls:\n\t- [IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L416)\n\tState variables written after the call(s):\n\t- [delete unlockRequests[unlockRequestsCursor]](contracts/src/PreMining.sol#L413)\n\t[PreMining.unlockRequests](contracts/src/PreMining.sol#L112) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425)\n\t- [PreMining.requestUnlock()](contracts/src/PreMining.sol#L375-L382)\n\t- [unlockRequestsCursor = processedId](contracts/src/PreMining.sol#L424)\n\t[PreMining.unlockRequestsCursor](contracts/src/PreMining.sol#L115) can be used in cross function reentrancies:\n\t- [PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", + "id": "fab13f604c4161d4f71a5928052b1aff41b48b7dbbe10b272265c93c6c1b1462", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "lToken.underlying().balanceOf(address(this)) < unlockAmount", + "source_mapping": { + "start": 17331, + "length": 59, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [410], + "starting_column": 21, + "ending_column": 80 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425) has external calls inside a loop: lToken.underlying().balanceOf(address(this)) < unlockAmount (contracts/src/PreMining.sol#410)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425) has external calls inside a loop: [lToken.underlying().balanceOf(address(this)) < unlockAmount](contracts/src/PreMining.sol#L410)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", + "id": "d0b841a27e83c26b2317a33df612f1dd04c7990827bdeaa7908e39f0ea361da1", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)", + "source_mapping": { + "start": 17571, + "length": 78, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [416], + "starting_column": 17, + "ending_column": 95 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425) has external calls inside a loop: IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount) (contracts/src/PreMining.sol#416)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425) has external calls inside a loop: [IERC20(address(lToken.underlying())).safeTransfer(unlockAccount,unlockAmount)](contracts/src/PreMining.sol#L416)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", + "id": "db40313c3eec409f2efb795c0c6f50217a5ee8a445a31178f693e04922568a17", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 8728, + "length": 1131, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + }, + { + "type": "node", + "name": "require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + rewardsVestingInSecond + threeMonthsInSecond,Not enough far from rewards vesting end)", + "source_mapping": { + "start": 9234, + "length": 192, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [229, 230, 231, 232, 233], + "starting_column": 9, + "ending_column": 10 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 8728, + "length": 1131, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + maxLockInSecond + threeMonthsInSecond,Not enough far from maximum lock end)", + "source_mapping": { + "start": 9604, + "length": 166, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [237, 238, 239, 240], + "starting_column": 9, + "ending_column": 10 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "startRecoveryPhase", + "source_mapping": { + "start": 8728, + "length": 1131, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "startRecoveryPhase()" + } + } + } + } + ], + "description": "PreMining.startRecoveryPhase() (contracts/src/PreMining.sol#221-244) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + rewardsVestingInSecond + threeMonthsInSecond,Not enough far from rewards vesting end) (contracts/src/PreMining.sol#229-233)\n\t- require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + maxLockInSecond + threeMonthsInSecond,Not enough far from maximum lock end) (contracts/src/PreMining.sol#237-240)\n", + "markdown": "[PreMining.startRecoveryPhase()](contracts/src/PreMining.sol#L221-L244) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + rewardsVestingInSecond + threeMonthsInSecond,Not enough far from rewards vesting end)](contracts/src/PreMining.sol#L229-L233)\n\t- [require(bool,string)(block.timestamp >= claimPhaseStartTimestamp + maxLockInSecond + threeMonthsInSecond,Not enough far from maximum lock end)](contracts/src/PreMining.sol#L237-L240)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L221-L244", + "id": "b8e400d0e4a17966560e52253fd7d37c546889cd8b2bfabe775d0a29d163c942", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18160, + "length": 1341, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + }, + { + "type": "node", + "name": "accountsLocks[msg.sender].claimedRewards > totalAvailableToClaim", + "source_mapping": { + "start": 19181, + "length": 64, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [449], + "starting_column": 13, + "ending_column": 77 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "availableToClaim", + "source_mapping": { + "start": 18160, + "length": 1341, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "availableToClaim(address)" + } + } + } + } + ], + "description": "PreMining.availableToClaim(address) (contracts/src/PreMining.sol#433-455) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsLocks[msg.sender].claimedRewards > totalAvailableToClaim (contracts/src/PreMining.sol#449)\n", + "markdown": "[PreMining.availableToClaim(address)](contracts/src/PreMining.sol#L433-L455) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsLocks[msg.sender].claimedRewards > totalAvailableToClaim](contracts/src/PreMining.sol#L449)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L433-L455", + "id": "ea17be9ef23480d4cb671eb6485f594da683c36623cf79991657a67db13e35f4", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + }, + { + "type": "node", + "name": "delete unlockRequests[unlockRequestsCursor]", + "source_mapping": { + "start": 17454, + "length": 43, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [413], + "starting_column": 17, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processUnlockRequests", + "source_mapping": { + "start": 16277, + "length": 1566, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "PreMining", + "source_mapping": { + "start": 1875, + "length": 18205, + "filename_relative": "contracts/src/PreMining.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/PreMining.sol", + "filename_short": "contracts/src/PreMining.sol", + "is_dependency": false, + "lines": [ + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processUnlockRequests()" + } + } + } + } + ], + "description": "PreMining.processUnlockRequests() (contracts/src/PreMining.sol#388-425) has costly operations inside a loop:\n\t- delete unlockRequests[unlockRequestsCursor] (contracts/src/PreMining.sol#413)\n", + "markdown": "[PreMining.processUnlockRequests()](contracts/src/PreMining.sol#L388-L425) has costly operations inside a loop:\n\t- [delete unlockRequests[unlockRequestsCursor]](contracts/src/PreMining.sol#L413)\n", + "first_markdown_element": "contracts/src/PreMining.sol#L388-L425", + "id": "0b8d84f541b380ee02f12f6b17326bd947084eece7ac5e04402f6950bd10bff4", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11754, + "length": 300, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [292, 293, 294, 295, 296, 297, 298], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + }, + { + "type": "node", + "name": "withdrawer = withdrawer_", + "source_mapping": { + "start": 12023, + "length": 24, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [297], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11754, + "length": 300, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [292, 293, 294, 295, 296, 297, 298], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + } + } + } + ], + "description": "OldLToken1.setWithdrawer(address) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#292-298) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#297) \n", + "markdown": "[OldLToken1.setWithdrawer(address)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L292-L298) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L297) \n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L292-L298", + "id": "a22396407cb8cb6167c12551674f4edeff83d18a6f812e1cb659a100323b0c5b", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12187, + "length": 261, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [304, 305, 306, 307, 308, 309, 310], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + }, + { + "type": "node", + "name": "fund = fund_", + "source_mapping": { + "start": 12429, + "length": 12, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [309], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12187, + "length": 261, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [304, 305, 306, 307, 308, 309, 310], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + } + } + } + ], + "description": "OldLToken1.setFund(address) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#304-310) should emit an event for: \n\t- fund = fund_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#309) \n", + "markdown": "[OldLToken1.setFund(address)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L304-L310) should emit an event for: \n\t- [fund = fund_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L309) \n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L304-L310", + "id": "34e20861921142640dd7980da834954f2b2aaddf2a1fa646696e4b7b265034f2", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10671, + "length": 108, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [265, 266, 267], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "feesRateUD7x3 = feesRateUD7x3_", + "source_mapping": { + "start": 10742, + "length": 30, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [266], + "starting_column": 9, + "ending_column": 39 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10671, + "length": 108, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [265, 266, 267], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + } + ], + "description": "OldLToken1.setFeesRate(uint32) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#265-267) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#266) \n", + "markdown": "[OldLToken1.setFeesRate(uint32)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L265-L267) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L266) \n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L265-L267", + "id": "a19f67e42f0667f0b63b3c536f3913beeab344fe248b08c3f4721520e4e78701", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11119, + "length": 201, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [275, 276, 277, 278], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + }, + { + "type": "node", + "name": "retentionRateUD7x3 = retentionRateUD7x3_", + "source_mapping": { + "start": 11273, + "length": 40, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [277], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11119, + "length": 201, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [275, 276, 277, 278], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + } + ], + "description": "OldLToken1.setRetentionRate(uint32) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#275-278) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#277) \n", + "markdown": "[OldLToken1.setRetentionRate(uint32)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L275-L278) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L277) \n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L275-L278", + "id": "3f48cdfdd8cab4d7afd54cf89bad43797169f127ee5ecdec7c422758b15982f6", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24425, + "length": 803, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + }, + { + "type": "node", + "name": "ldyStaking.tierOf(account) >= 2", + "source_mapping": { + "start": 24666, + "length": 31, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [592], + "starting_column": 13, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24425, + "length": 803, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "OldLToken1.getWithdrawnAmountAndFees(address,uint256) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#587-605) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#592)\n", + "markdown": "[OldLToken1.getWithdrawnAmountAndFees(address,uint256)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L587-L605) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L592)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L587-L605", + "id": "d2de1a1a30ccb83545d2a11b47793973fbe7a5b86735b66a1a159866f55d6dc9", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "underlying().safeTransfer(request.account,withdrawnAmount)", + "source_mapping": { + "start": 33489, + "length": 59, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [799], + "starting_column": 17, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", + "source_mapping": { + "start": 32685, + "length": 262, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [781, 782, 783, 784, 785, 786, 787, 788], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + } + ], + "description": "Reentrancy in OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#799)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#781-788)\n", + "markdown": "Reentrancy in [OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L799)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L781-L788)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", + "id": "42600a5ce08ef0da606bdfbc59477b0ec1ca4fdb95a740e2334e1931ca7e04e7", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31270, + "length": 37, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [749], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#749)\n", + "markdown": "[OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L749)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", + "id": "f9aeeacfcf456855d5c6f089564c96d7a5d543397d0833110325d0ac1e902215", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31756, + "length": 37, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [759], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#759)\n", + "markdown": "[OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L759)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", + "id": "ba6b2d728b6dd87794875886145677ecd11a7fd480c0b5096ce520dc1128778e", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 33011, + "length": 37, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [791], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29833, + "length": 4535, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "OldLToken1.processQueuedRequests() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#791)\n", + "markdown": "[OldLToken1.processQueuedRequests()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L791)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L722-L821", + "id": "00f2b9a34b80d75b8f5b6abe48b2e70a60860977357b763ce9d8341dbc70937f", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27707, + "length": 1876, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 29493, + "length": 53, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [713], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27707, + "length": 1876, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in OldLToken1.requestWithdrawal(uint256) (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#662-715):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#713)\n", + "markdown": "Low level call in [OldLToken1.requestWithdrawal(uint256)](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L662-L715):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L713)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L662-L715", + "id": "96835e689272286e020faa3bfb055f8fe2d5da9110a6fa5c5c4bdeb5125170a8", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "MAX_RETENTION_RATE_UD7x3", + "source_mapping": { + "start": 3796, + "length": 63, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [84], + "starting_column": 5, + "ending_column": 68 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" + } + } + ], + "description": "Constant OldLToken1.MAX_RETENTION_RATE_UD7x3 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#84) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [OldLToken1.MAX_RETENTION_RATE_UD7x3](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L84) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L84", + "id": "2f5390adfa95e3f9ab0ee72044c365cddcb0d69c6cf45302bf3174c35cfaa280", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 22810, + "length": 7, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [544], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22711, + "length": 196, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [543, 544, 545, 546, 547], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#544)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", + "markdown": "Redundant expression \"[account](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L544)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L544", + "id": "69a7609454115d344ccee5e1a4e7d54ed21845c4e83c0b423d5bb1835c6fe1a3", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 22871, + "length": 6, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [545], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22711, + "length": 196, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [543, 544, 545, 546, 547], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#545)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", + "markdown": "Redundant expression \"[amount](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L545)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L545", + "id": "cdae2e45851369855ef99f75d258bd2c45a60cc25c56d8f6b35ee1a7877db86a", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 23188, + "length": 7, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [555], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23089, + "length": 196, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [554, 555, 556, 557, 558], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#555)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", + "markdown": "Redundant expression \"[account](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L555)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L555", + "id": "d042f96aced291513cf8e59f20cc4650491624b09914a1fbdc058e08f1c36d10", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 23249, + "length": 6, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [556], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23089, + "length": 196, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [554, 555, 556, 557, 558], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "OldLToken1", + "source_mapping": { + "start": 2930, + "length": 37460, + "filename_relative": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "filename_short": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#556)\" inOldLToken1 (contracts/src/archive/LToken-before-Aug-22-upgrade.sol#56-975)\n", + "markdown": "Redundant expression \"[amount](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L556)\" in[OldLToken1](contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/archive/LToken-before-Aug-22-upgrade.sol#L556", + "id": "af0571f30581025a2c62cbe9de94c2a4af3a2a7e2455cd976fd7f59ad08c0fb7", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11863, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [295, 296, 297, 298, 299, 300, 301], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + }, + { + "type": "node", + "name": "withdrawer = withdrawer_", + "source_mapping": { + "start": 12132, + "length": 24, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [300], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11863, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [295, 296, 297, 298, 299, 300, 301], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + } + } + } + ], + "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#295-301) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#300) \n", + "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L295-L301) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L300) \n", + "first_markdown_element": "contracts/src/LToken.sol#L295-L301", + "id": "69662eae3ce23698b8f37d5c66f42cb4d8b24e4df17466211ad3dbaba6765dcb", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12296, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [307, 308, 309, 310, 311, 312, 313], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + }, + { + "type": "node", + "name": "fund = fund_", + "source_mapping": { + "start": 12538, + "length": 12, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [312], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12296, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [307, 308, 309, 310, 311, 312, 313], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + } + } + } + ], + "description": "LToken.setFund(address) (contracts/src/LToken.sol#307-313) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#312) \n", + "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L307-L313) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L312) \n", + "first_markdown_element": "contracts/src/LToken.sol#L307-L313", + "id": "3ad594589ec5dee05e1692584f0b5edc54ba72863733875f51972275e630bb2b", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10780, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [268, 269, 270], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "feesRateUD7x3 = feesRateUD7x3_", + "source_mapping": { + "start": 10851, + "length": 30, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [269], + "starting_column": 9, + "ending_column": 39 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10780, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [268, 269, 270], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + } + ], + "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#268-270) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#269) \n", + "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L268-L270) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L269) \n", + "first_markdown_element": "contracts/src/LToken.sol#L268-L270", + "id": "39510cdd4bee3e732324ba935dc6ee429e4da1131002bdacdda116dbea792c0e", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11228, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [278, 279, 280, 281], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + }, + { + "type": "node", + "name": "retentionRateUD7x3 = retentionRateUD7x3_", + "source_mapping": { + "start": 11382, + "length": 40, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [280], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11228, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [278, 279, 280, 281], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + } + ], + "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#278-281) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#280) \n", + "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L278-L281) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L280) \n", + "first_markdown_element": "contracts/src/LToken.sol#L278-L281", + "id": "97deb04145d8f767222759ec2b1c8d9eeeee3e6750b28816eebc7eedb223175d", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24635, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + }, + { + "type": "node", + "name": "ldyStaking.tierOf(account) >= 2", + "source_mapping": { + "start": 24876, + "length": 31, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [603], + "starting_column": 13, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24635, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#598-616) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#603)\n", + "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L598-L616) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L603)\n", + "first_markdown_element": "contracts/src/LToken.sol#L598-L616", + "id": "12e2e84178ca6125a5405faf01d1d2806b087a70cab1a9e0a794f4e7e43d7194", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "underlying().safeTransfer(request.account,withdrawnAmount)", + "source_mapping": { + "start": 34186, + "length": 59, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [824], + "starting_column": 17, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))", + "source_mapping": { + "start": 32054, + "length": 308, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [772, 773, 774, 775, 776, 777, 778, 779, 780], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)", + "source_mapping": { + "start": 33355, + "length": 289, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [805, 806, 807, 808, 809, 810, 811, 812, 813], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + } + ], + "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#824)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length)) (contracts/src/LToken.sol#772-780)\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID) (contracts/src/LToken.sol#805-813)\n", + "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L824)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),_msgSender(),Action.Withdraw,request.amount,request.amount,Status.Moved,int256(withdrawalQueue.length))](contracts/src/LToken.sol#L772-L780)\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success,NO_ID)](contracts/src/LToken.sol#L805-L813)\n", + "first_markdown_element": "contracts/src/LToken.sol#L735-L846", + "id": "d50d58878c4490cbb6422f63b619c954e82bc6df869bf3af7050efed4bc871bd", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31518, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [762], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#762)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L762)\n", + "first_markdown_element": "contracts/src/LToken.sol#L735-L846", + "id": "eeb3ee2ec346674d6e8e347dd0bc3ef0f1fa8ce4eafd3dc8bb6eae5738d716d1", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 32426, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [783], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#783)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L783)\n", + "first_markdown_element": "contracts/src/LToken.sol#L735-L846", + "id": "966f20f807cc0f0ccb0d21053da246cb80a15c3cf4e1ebc67c7762299960d4a2", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 33708, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [816], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 30081, + "length": 4984, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#735-846) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#816)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L735-L846) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L816)\n", + "first_markdown_element": "contracts/src/LToken.sol#L735-L846", + "id": "2978397b0b0238caedb623a690c91ba4e460fdd042c77f8f23471f8f646f091c", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27936, + "length": 1895, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 29741, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [726], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27936, + "length": 1895, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#674-728):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#726)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L674-L728):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L726)\n", + "first_markdown_element": "contracts/src/LToken.sol#L674-L728", + "id": "6f227c0b8fed1dd452cdc25be3dfc52800c766be6dff3845b1f468552183a0f5", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 22919, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [547], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22820, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [546, 547, 548, 549, 550], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#547)\" inLToken (contracts/src/LToken.sol#56-1002)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L547)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", + "first_markdown_element": "contracts/src/LToken.sol#L547", + "id": "c801a30fb3294caf1aea7a38cb98dce5ba83bffe3c349ee13f4d1ef6f6ca26eb", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 22980, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [548], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22820, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [546, 547, 548, 549, 550], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#548)\" inLToken (contracts/src/LToken.sol#56-1002)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L548)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", + "first_markdown_element": "contracts/src/LToken.sol#L548", + "id": "f5c48fbf1702b5c6523ad2f58ad2bb95602cdb6d8beb66e65fff5c2d7352cfbd", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 23297, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [558], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23198, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [557, 558, 559, 560, 561], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#558)\" inLToken (contracts/src/LToken.sol#56-1002)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L558)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", + "first_markdown_element": "contracts/src/LToken.sol#L558", + "id": "7cbe2da74b349ac581e0fc3590a4420db94d11243212ce46a375b6eaa3f71173", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 23358, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [559], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23198, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [557, 558, 559, 560, 561], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 38200, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#559)\" inLToken (contracts/src/LToken.sol#56-1002)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L559)\" in[LToken](contracts/src/LToken.sol#L56-L1002)\n", + "first_markdown_element": "contracts/src/LToken.sol#L559", + "id": "cd3d58371bc24707adfe231f58854837101da3426577b3069746b5d5e273970b", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10589, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)", + "source_mapping": { + "start": 11022, + "length": 89, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [270], + "starting_column": 9, + "ending_column": 98 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10589, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", + "source_mapping": { + "start": 11243, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [274], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10589, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#259-280) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d) (contracts/src/abstracts/InvestUpgradeable.sol#270)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#274)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L259-L280) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)](contracts/src/abstracts/InvestUpgradeable.sol#L270)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L274)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L259-L280", + "id": "09ce4960c5eb4c414974ac65ceb89dbafe8dfe1459df42916c4957bc11398d39", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10589, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", + "source_mapping": { + "start": 11243, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [274], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10589, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)", + "source_mapping": { + "start": 11433, + "length": 74, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [278], + "starting_column": 9, + "ending_column": 83 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10589, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#259-280) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#274)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d) (contracts/src/abstracts/InvestUpgradeable.sol#278)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L259-L280) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L274)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)](contracts/src/abstracts/InvestUpgradeable.sol#L278)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L259-L280", + "id": "c5e155c1aef8b5ff3782a92144d2c54d0e5ba92c526ec17b230648af5e648759", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17821, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18388, + "length": 68, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [418], + "starting_column": 13, + "ending_column": 81 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17821, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#410-445) uses a dangerous strict equality:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#418)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L410-L445) uses a dangerous strict equality:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L418)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L410-L445", + "id": "533b6f11b9abd215ea9359ff40c1acc86274c66f96a6512dc49ae3b583aaf9da", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_isClaiming", + "source_mapping": { + "start": 3874, + "length": 24, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [89], + "starting_column": 5, + "ending_column": 29 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = true", + "source_mapping": { + "start": 19125, + "length": 18, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [435], + "starting_column": 13, + "ending_column": 31 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17821, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = false", + "source_mapping": { + "start": 19226, + "length": 19, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [437], + "starting_column": 13, + "ending_column": 32 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17821, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#89) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#435)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#437)\n", + "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L89) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L435)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L437)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L89", + "id": "7d51fd10545d0e90cee32608f7777188a0448965ef7f7d30713a301896324bad", + "check": "write-after-write", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11745, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [292, 293, 294, 295, 296, 297, 298], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + }, + { + "type": "node", + "name": "withdrawer = withdrawer_", + "source_mapping": { + "start": 12014, + "length": 24, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [297], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11745, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [292, 293, 294, 295, 296, 297, 298], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + } + } + } + ], + "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#292-298) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#297) \n", + "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L292-L298) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L297) \n", + "first_markdown_element": "contracts/src/LToken.sol#L292-L298", + "id": "ec3aab1de8dab8070b47e183c694051e49bc5a2478e75e36fc8f11f9b5b41044", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12178, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [304, 305, 306, 307, 308, 309, 310], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + }, + { + "type": "node", + "name": "fund = fund_", + "source_mapping": { + "start": 12420, + "length": 12, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [309], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12178, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [304, 305, 306, 307, 308, 309, 310], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + } + } + } + ], + "description": "LToken.setFund(address) (contracts/src/LToken.sol#304-310) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#309) \n", + "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L304-L310) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L309) \n", + "first_markdown_element": "contracts/src/LToken.sol#L304-L310", + "id": "80b61aecbde66907228c0799264d05dca5dd52a141faecfe9bda8b813b971ded", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10662, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [265, 266, 267], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "feesRateUD7x3 = feesRateUD7x3_", + "source_mapping": { + "start": 10733, + "length": 30, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [266], + "starting_column": 9, + "ending_column": 39 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10662, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [265, 266, 267], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + } + ], + "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#265-267) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#266) \n", + "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L265-L267) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L266) \n", + "first_markdown_element": "contracts/src/LToken.sol#L265-L267", + "id": "285dcf1d2e0697b40955e354766b38861d66ce8aa3bcef41c178f67d56e7c76d", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11110, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [275, 276, 277, 278], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + }, + { + "type": "node", + "name": "retentionRateUD7x3 = retentionRateUD7x3_", + "source_mapping": { + "start": 11264, + "length": 40, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [277], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 11110, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [275, 276, 277, 278], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + } + ], + "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#275-278) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#277) \n", + "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L275-L278) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L277) \n", + "first_markdown_element": "contracts/src/LToken.sol#L275-L278", + "id": "41d82b6925bf8767117a3feda5dd2e8e13be7b7fe11838b3846e51a9b13cdddf", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24416, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + }, + { + "type": "node", + "name": "ldyStaking.tierOf(account) >= 2", + "source_mapping": { + "start": 24657, + "length": 31, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [592], + "starting_column": 13, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24416, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#587-605) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#592)\n", + "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L587-L605) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L592)\n", + "first_markdown_element": "contracts/src/LToken.sol#L587-L605", + "id": "3014f302ce354b3b91599b91c9735709c58b7fc4bf436e8ce3868f5e1f358f31", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "underlying().safeTransfer(request.account,withdrawnAmount)", + "source_mapping": { + "start": 33480, + "length": 59, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [799], + "starting_column": 17, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", + "source_mapping": { + "start": 32676, + "length": 262, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [781, 782, 783, 784, 785, 786, 787, 788], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + } + ], + "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#799)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/LToken.sol#781-788)\n", + "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L799)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/LToken.sol#L781-L788)\n", + "first_markdown_element": "contracts/src/LToken.sol#L722-L821", + "id": "c33c152baf16f394b46ccf273618e73c686a23a6561dc4f2f01bf964aa969b2c", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17821, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18388, + "length": 68, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [418], + "starting_column": 13, + "ending_column": 81 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17821, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#410-445) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#418)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L410-L445) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L418)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L410-L445", + "id": "c40694987242a5c8b669f2d66c4bd30e976c471e6d0da092c53ef7e5f3f2fb24", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31261, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [749], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#749)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L749)\n", + "first_markdown_element": "contracts/src/LToken.sol#L722-L821", + "id": "cda318f17cbe329788fb9b7d21a1192a3f8d45ac824e5df063eecdf8718269bb", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31747, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [759], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#759)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L759)\n", + "first_markdown_element": "contracts/src/LToken.sol#L722-L821", + "id": "32eb76d34086fc56cecc7e3f3ab9c48e19b99178b0779f06b58a7917a79df1aa", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 33002, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [791], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29824, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#722-821) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#791)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L722-L821) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L791)\n", + "first_markdown_element": "contracts/src/LToken.sol#L722-L821", + "id": "fb259faf9ca1f4cc709f2353784487e3ebe34620e0e17e3064025c76142a91db", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27698, + "length": 1876, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 29484, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [713], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27698, + "length": 1876, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#662-715):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#713)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L662-L715):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L713)\n", + "first_markdown_element": "contracts/src/LToken.sol#L662-L715", + "id": "836a94c939fc40a13037c015d86014baebc51354edc3839d0ac71583524b09c6", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 22801, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [544], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22702, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [543, 544, 545, 546, 547], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#544)\" inLToken (contracts/src/LToken.sol#56-975)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L544)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/LToken.sol#L544", + "id": "b06580630fe57948ca3b60b159c54106c824a947f6b50ec171cd5cbb0f50dfae", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 22862, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [545], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22702, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [543, 544, 545, 546, 547], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#545)\" inLToken (contracts/src/LToken.sol#56-975)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L545)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/LToken.sol#L545", + "id": "a7fda804628aaf599ca767beef7f077e295bc8b1a2aff2d858b4c69961840aff", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 23179, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [555], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23080, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [554, 555, 556, 557, 558], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#555)\" inLToken (contracts/src/LToken.sol#56-975)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L555)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/LToken.sol#L555", + "id": "101a0b5349aa851ff048602d60a91c749268773dd50144a9f64cd17f958b3a80", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 23240, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [556], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 23080, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [554, 555, 556, 557, 558], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37456, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#556)\" inLToken (contracts/src/LToken.sol#56-975)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L556)\" in[LToken](contracts/src/LToken.sol#L56-L975)\n", + "first_markdown_element": "contracts/src/LToken.sol#L556", + "id": "8dab9f0a7e40e852a59f44fabe4c6224a26caae0d41c3831e9503ad13f031edc", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 9886, + "length": 7, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [243], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9783, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [242, 243, 244, 245, 246], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#243)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-453)\n", + "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L243)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L453)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L243", + "id": "e328f3bc9613ac4d19eacba9569b8a19cf1f90b3c3a5ff56bd83fae86b379eb5", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 9939, + "length": 6, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [244], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9783, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [242, 243, 244, 245, 246], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17466, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#244)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-453)\n", + "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L244)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L453)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L244", + "id": "c9456de19b5b90645c1f912ae306cf0a405e100c453596be3cb542c41f5a00f2", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "underlying().safeTransfer(request.account,withdrawnAmount)", + "source_mapping": { + "start": 33302, + "length": 59, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [798], + "starting_column": 17, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", + "source_mapping": { + "start": 32498, + "length": 262, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [780, 781, 782, 783, 784, 785, 786, 787], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + } + ], + "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#798)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/LToken.sol#780-787)\n", + "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L798)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/LToken.sol#L780-L787)\n", + "first_markdown_element": "contracts/src/LToken.sol#L721-L820", + "id": "a00075235875a398a2ba50289c1720384eb04b020fa085968f7b0ce81eea7619", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "isBlacklisted", + "source_mapping": { + "start": 2553, + "length": 132, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [67, 68, 69], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 872, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "isBlacklisted(address)" + } + }, + { + "type": "node", + "name": "_globalBlacklist.isBlacklisted(account)", + "source_mapping": { + "start": 2632, + "length": 46, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [68], + "starting_column": 9, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "isBlacklisted", + "source_mapping": { + "start": 2553, + "length": 132, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [67, 68, 69], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 872, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "isBlacklisted(address)" + } + } + } + } + ], + "description": "GlobalRestrictableUpgradeable.isBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#67-69) has external calls inside a loop: _globalBlacklist.isBlacklisted(account) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#68)\n", + "markdown": "[GlobalRestrictableUpgradeable.isBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67-L69) has external calls inside a loop: [_globalBlacklist.isBlacklisted(account)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L68)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67-L69", + "id": "b68d23942f819da7602ac907b999a603d73a549609bb37227c8a6d8813e5ef8c", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "decimalsOf", + "source_mapping": { + "start": 4165, + "length": 157, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [81, 82, 83], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "SUD", + "source_mapping": { + "start": 3899, + "length": 3844, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [ + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "decimalsOf(address)" + } + }, + { + "type": "node", + "name": "IERC20MetadataUpgradeable(tokenAddress).decimals()", + "source_mapping": { + "start": 4258, + "length": 57, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [82], + "starting_column": 9, + "ending_column": 66 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "decimalsOf", + "source_mapping": { + "start": 4165, + "length": 157, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [81, 82, 83], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "SUD", + "source_mapping": { + "start": 3899, + "length": 3844, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [ + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "decimalsOf(address)" + } + } + } + } + ], + "description": "SUD.decimalsOf(address) (contracts/src/libs/SUD.sol#81-83) has external calls inside a loop: IERC20MetadataUpgradeable(tokenAddress).decimals() (contracts/src/libs/SUD.sol#82)\n", + "markdown": "[SUD.decimalsOf(address)](contracts/src/libs/SUD.sol#L81-L83) has external calls inside a loop: [IERC20MetadataUpgradeable(tokenAddress).decimals()](contracts/src/libs/SUD.sol#L82)\n", + "first_markdown_element": "contracts/src/libs/SUD.sol#L81-L83", + "id": "d5194ea473e87b18afb6b443c345a2dd76b0cda2e1041a12d75921a207c34bed", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24238, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + }, + { + "type": "node", + "name": "ldyStaking.tierOf(account) >= 2", + "source_mapping": { + "start": 24479, + "length": 31, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [591], + "starting_column": 13, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 24238, + "length": 803, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#586-604) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#591)\n", + "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L586-L604) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L591)\n", + "first_markdown_element": "contracts/src/LToken.sol#L586-L604", + "id": "d497539f193bd1f2cf9a8152879dc1b3165b72640a24062050438a5e6d133f0f", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10404, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)", + "source_mapping": { + "start": 10837, + "length": 89, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [265], + "starting_column": 9, + "ending_column": 98 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10404, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", + "source_mapping": { + "start": 11058, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [269], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10404, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#254-275) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d) (contracts/src/abstracts/InvestUpgradeable.sol#265)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#269)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L254-L275) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elapsedTimeSUD * SUD.fromInt(1,d)) / SUD.fromInt(31536000,d)](contracts/src/abstracts/InvestUpgradeable.sol#L265)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L269)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L254-L275", + "id": "1d2f36e807348b9f41fec5cd93e60964469b0fc66c23a3ef3c01502ced5efb8e", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10404, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)", + "source_mapping": { + "start": 11058, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [269], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10404, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)", + "source_mapping": { + "start": 11248, + "length": 74, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [273], + "starting_column": 9, + "ending_column": 83 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10404, + "length": 969, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#254-275) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d) (contracts/src/abstracts/InvestUpgradeable.sol#269)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d) (contracts/src/abstracts/InvestUpgradeable.sol#273)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L254-L275) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / SUD.fromInt(1,d)](contracts/src/abstracts/InvestUpgradeable.sol#L269)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / SUD.fromInt(100,d)](contracts/src/abstracts/InvestUpgradeable.sol#L273)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L254-L275", + "id": "cd14cad6ad9e2d59c245a27936678ee82b57115310e0300f16d2deb8ccd9e4bc", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + }, + { + "type": "node", + "name": "growthRateSUD = (addedAmountSUD * SUD.fromInt(100,18)) / accountStakeSUD", + "source_mapping": { + "start": 7664, + "length": 81, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [185], + "starting_column": 9, + "ending_column": 90 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "lockDurationIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / SUD.fromInt(100,18)", + "source_mapping": { + "start": 7829, + "length": 107, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [188, 189], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + } + ], + "description": "WIP_LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/dev/LDYStaking.sol#169-212) performs a multiplication on the result of a division:\n\t- growthRateSUD = (addedAmountSUD * SUD.fromInt(100,18)) / accountStakeSUD (contracts/src/dev/LDYStaking.sol#185)\n\t- lockDurationIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / SUD.fromInt(100,18) (contracts/src/dev/LDYStaking.sol#188-189)\n", + "markdown": "[WIP_LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/dev/LDYStaking.sol#L169-L212) performs a multiplication on the result of a division:\n\t- [growthRateSUD = (addedAmountSUD * SUD.fromInt(100,18)) / accountStakeSUD](contracts/src/dev/LDYStaking.sol#L185)\n\t- [lockDurationIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / SUD.fromInt(100,18)](contracts/src/dev/LDYStaking.sol#L188-L189)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L169-L212", + "id": "64740a45b8e6371c48dfdbec99c5af372e723343018731a180e80749c7548368", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17636, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18203, + "length": 68, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [413], + "starting_column": 13, + "ending_column": 81 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17636, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#405-440) uses a dangerous strict equality:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#413)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L405-L440) uses a dangerous strict equality:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L413)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L405-L440", + "id": "dc7b0d492e427b4f16ac1d6d21755162da310676669e99e6cdd323aaf9c7143d", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + }, + { + "type": "node", + "name": "accountStake.amount == 0", + "source_mapping": { + "start": 7270, + "length": 24, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [177], + "starting_column": 13, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + } + ], + "description": "WIP_LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/dev/LDYStaking.sol#169-212) uses a dangerous strict equality:\n\t- accountStake.amount == 0 (contracts/src/dev/LDYStaking.sol#177)\n", + "markdown": "[WIP_LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/dev/LDYStaking.sol#L169-L212) uses a dangerous strict equality:\n\t- [accountStake.amount == 0](contracts/src/dev/LDYStaking.sol#L177)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L169-L212", + "id": "295fe3b4c7566bcfae2e2ab16d451726e7bd20d9fec6fba33ebd37307083da93", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_isClaiming", + "source_mapping": { + "start": 3874, + "length": 24, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [89], + "starting_column": 5, + "ending_column": 29 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = true", + "source_mapping": { + "start": 18940, + "length": 18, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [430], + "starting_column": 13, + "ending_column": 31 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17636, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = false", + "source_mapping": { + "start": 19041, + "length": 19, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [432], + "starting_column": 13, + "ending_column": 32 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17636, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#89) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#430)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#432)\n", + "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L89) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L430)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L432)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L89", + "id": "97001dbcb6e8ee671b3308eeea0c177549df0d7bd78ae49c59042d1054eda549", + "check": "write-after-write", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11567, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [291, 292, 293, 294, 295, 296, 297], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + }, + { + "type": "node", + "name": "withdrawer = withdrawer_", + "source_mapping": { + "start": 11836, + "length": 24, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [296], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 11567, + "length": 300, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [291, 292, 293, 294, 295, 296, 297], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + } + } + } + ], + "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#291-297) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#296) \n", + "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L291-L297) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L296) \n", + "first_markdown_element": "contracts/src/LToken.sol#L291-L297", + "id": "b2d064185c68f4d4863c83e6d6f24ed937530e77050e04a669cbceb3a5a99dda", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12000, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [303, 304, 305, 306, 307, 308, 309], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + }, + { + "type": "node", + "name": "fund = fund_", + "source_mapping": { + "start": 12242, + "length": 12, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [308], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 12000, + "length": 261, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [303, 304, 305, 306, 307, 308, 309], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + } + } + } + ], + "description": "LToken.setFund(address) (contracts/src/LToken.sol#303-309) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#308) \n", + "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L303-L309) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L308) \n", + "first_markdown_element": "contracts/src/LToken.sol#L303-L309", + "id": "685c7bc65a988d2ea6eeb76c80a8f01e9a89eb8966e24cf6f9e68c44b6e8568a", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10484, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [264, 265, 266], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "feesRateUD7x3 = feesRateUD7x3_", + "source_mapping": { + "start": 10555, + "length": 30, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [265], + "starting_column": 9, + "ending_column": 39 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 10484, + "length": 108, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [264, 265, 266], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + } + ], + "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#264-266) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#265) \n", + "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L264-L266) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L265) \n", + "first_markdown_element": "contracts/src/LToken.sol#L264-L266", + "id": "49c09b6205923501046668d773d3cff6f5274e24c7a39c8bf815885ee49f4527", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 10932, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [274, 275, 276, 277], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + }, + { + "type": "node", + "name": "retentionRateUD7x3 = retentionRateUD7x3_", + "source_mapping": { + "start": 11086, + "length": 40, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [276], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 10932, + "length": 201, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [274, 275, 276, 277], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + } + ], + "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#274-277) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#276) \n", + "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L274-L277) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L276) \n", + "first_markdown_element": "contracts/src/LToken.sol#L274-L277", + "id": "b27a65f5281f8e6da3636594c0058be9c8f51168dcfbf9b3b35b07f59471c4b9", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setUnlockFeesRate", + "source_mapping": { + "start": 9697, + "length": 132, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [228, 229, 230], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setUnlockFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "unlockFeesRateUD7x3 = unlockFeesRateUD7x3_", + "source_mapping": { + "start": 9780, + "length": 42, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [229], + "starting_column": 9, + "ending_column": 51 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setUnlockFeesRate", + "source_mapping": { + "start": 9697, + "length": 132, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [228, 229, 230], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setUnlockFeesRate(uint32)" + } + } + } + } + ], + "description": "WIP_LDYStaking.setUnlockFeesRate(uint32) (contracts/src/dev/LDYStaking.sol#228-230) should emit an event for: \n\t- unlockFeesRateUD7x3 = unlockFeesRateUD7x3_ (contracts/src/dev/LDYStaking.sol#229) \n", + "markdown": "[WIP_LDYStaking.setUnlockFeesRate(uint32)](contracts/src/dev/LDYStaking.sol#L228-L230) should emit an event for: \n\t- [unlockFeesRateUD7x3 = unlockFeesRateUD7x3_](contracts/src/dev/LDYStaking.sol#L229) \n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L228-L230", + "id": "cc2b3d3af6fd6516bbd5e2cb2e466fc24f9418562cb80ea3eb8b9b012d0837eb", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setStakeLockDuration", + "source_mapping": { + "start": 9982, + "length": 129, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [236, 237, 238], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setStakeLockDuration(uint40)" + } + }, + { + "type": "node", + "name": "stakeLockDuration = stakeLockDuration_", + "source_mapping": { + "start": 10066, + "length": 38, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [237], + "starting_column": 9, + "ending_column": 47 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setStakeLockDuration", + "source_mapping": { + "start": 9982, + "length": 129, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [236, 237, 238], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setStakeLockDuration(uint40)" + } + } + } + } + ], + "description": "WIP_LDYStaking.setStakeLockDuration(uint40) (contracts/src/dev/LDYStaking.sol#236-238) should emit an event for: \n\t- stakeLockDuration = stakeLockDuration_ (contracts/src/dev/LDYStaking.sol#237) \n", + "markdown": "[WIP_LDYStaking.setStakeLockDuration(uint40)](contracts/src/dev/LDYStaking.sol#L236-L238) should emit an event for: \n\t- [stakeLockDuration = stakeLockDuration_](contracts/src/dev/LDYStaking.sol#L237) \n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L236-L238", + "id": "963fd008326cfdfdc9aa3edfbb2216ec7947202c318cb01deca100023787d04d", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "fuel", + "source_mapping": { + "start": 10272, + "length": 348, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "fuel(uint256)" + } + }, + { + "type": "node", + "name": "rewardsReserve += amount", + "source_mapping": { + "start": 10449, + "length": 24, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [249], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "fuel", + "source_mapping": { + "start": 10272, + "length": 348, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "fuel(uint256)" + } + } + } + } + ], + "description": "WIP_LDYStaking.fuel(uint256) (contracts/src/dev/LDYStaking.sol#244-253) should emit an event for: \n\t- rewardsReserve += amount (contracts/src/dev/LDYStaking.sol#249) \n", + "markdown": "[WIP_LDYStaking.fuel(uint256)](contracts/src/dev/LDYStaking.sol#L244-L253) should emit an event for: \n\t- [rewardsReserve += amount](contracts/src/dev/LDYStaking.sol#L249) \n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L244-L253", + "id": "50f30fa0584b6b97e798b97091706b2455cf3ded90b97b834f4572283d2328a9", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17636, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsDetails[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18203, + "length": 68, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [413], + "starting_column": 13, + "ending_column": 81 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17636, + "length": 1735, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#405-440) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsDetails[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#413)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L405-L440) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsDetails[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L413)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L405-L440", + "id": "88a1c33b8569a50b9337d9a441eab0ce41dcaa1ea214f76a2e7df864450ce6d8", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + }, + { + "type": "node", + "name": "accountStake.amount == 0", + "source_mapping": { + "start": 7270, + "length": 24, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [177], + "starting_column": 13, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "_lockDurationIncrease > type()(uint40).max", + "source_mapping": { + "start": 8163, + "length": 138, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [194, 195, 196], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "accountStake.lockEnd < uint40(block.timestamp)", + "source_mapping": { + "start": 8450, + "length": 154, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [200, 201, 202], + "starting_column": 9, + "ending_column": 61 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "lockDurationsSum > stakeLockDuration", + "source_mapping": { + "start": 8901, + "length": 150, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [209, 210, 211], + "starting_column": 9, + "ending_column": 35 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6922, + "length": 2136, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + } + ], + "description": "WIP_LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/dev/LDYStaking.sol#169-212) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountStake.amount == 0 (contracts/src/dev/LDYStaking.sol#177)\n\t- _lockDurationIncrease > type()(uint40).max (contracts/src/dev/LDYStaking.sol#194-196)\n\t- accountStake.lockEnd < uint40(block.timestamp) (contracts/src/dev/LDYStaking.sol#200-202)\n\t- lockDurationsSum > stakeLockDuration (contracts/src/dev/LDYStaking.sol#209-211)\n", + "markdown": "[WIP_LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/dev/LDYStaking.sol#L169-L212) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountStake.amount == 0](contracts/src/dev/LDYStaking.sol#L177)\n\t- [_lockDurationIncrease > type()(uint40).max](contracts/src/dev/LDYStaking.sol#L194-L196)\n\t- [accountStake.lockEnd < uint40(block.timestamp)](contracts/src/dev/LDYStaking.sol#L200-L202)\n\t- [lockDurationsSum > stakeLockDuration](contracts/src/dev/LDYStaking.sol#L209-L211)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L169-L212", + "id": "e66d5e1c87f75006040c84a440a12a8ec82422c38410002bbedde371e451fda0", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10831, + "length": 1015, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + }, + { + "type": "node", + "name": "require(bool,string)(accountStake.lockEnd > block.timestamp,L24)", + "source_mapping": { + "start": 11074, + "length": 54, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [265], + "starting_column": 9, + "ending_column": 63 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10831, + "length": 1015, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + } + } + } + ], + "description": "WIP_LDYStaking.unlock() (contracts/src/dev/LDYStaking.sol#260-284) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(accountStake.lockEnd > block.timestamp,L24) (contracts/src/dev/LDYStaking.sol#265)\n", + "markdown": "[WIP_LDYStaking.unlock()](contracts/src/dev/LDYStaking.sol#L260-L284) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(accountStake.lockEnd > block.timestamp,L24)](contracts/src/dev/LDYStaking.sol#L265)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L260-L284", + "id": "0a4531cc6a1359ecd2bcd1f84c4ec86a21cf2ef415b66c13a341d3adb6344b6c", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 13275, + "length": 1095, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + }, + { + "type": "node", + "name": "require(bool,string)(stakeOf(_msgSender()) >= amount,L28)", + "source_mapping": { + "start": 13509, + "length": 47, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [329], + "starting_column": 9, + "ending_column": 56 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 13275, + "length": 1095, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)", + "source_mapping": { + "start": 13733, + "length": 55, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [335], + "starting_column": 9, + "ending_column": 64 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 13275, + "length": 1095, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + } + } + } + ], + "description": "WIP_LDYStaking.unstake(uint216) (contracts/src/dev/LDYStaking.sol#324-352) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(stakeOf(_msgSender()) >= amount,L28) (contracts/src/dev/LDYStaking.sol#329)\n\t- require(bool,string)(accountStake.lockEnd <= block.timestamp,L29) (contracts/src/dev/LDYStaking.sol#335)\n", + "markdown": "[WIP_LDYStaking.unstake(uint216)](contracts/src/dev/LDYStaking.sol#L324-L352) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(stakeOf(_msgSender()) >= amount,L28)](contracts/src/dev/LDYStaking.sol#L329)\n\t- [require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)](contracts/src/dev/LDYStaking.sol#L335)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L324-L352", + "id": "638304566b3df44b85610010d2cfa582d247f2cde995898964289b33e3985d64", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18925, + "length": 564, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + }, + { + "type": "node", + "name": "_tiers.length < 1 || stakedAmount < getTier(1)", + "source_mapping": { + "start": 19168, + "length": 46, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [479], + "starting_column": 13, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18925, + "length": 564, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + }, + { + "type": "node", + "name": "tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)", + "source_mapping": { + "start": 19412, + "length": 62, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [485], + "starting_column": 16, + "ending_column": 78 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18925, + "length": 564, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + } + ], + "description": "WIP_LDYStaking.tierOf(address) (contracts/src/dev/LDYStaking.sol#474-486) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _tiers.length < 1 || stakedAmount < getTier(1) (contracts/src/dev/LDYStaking.sol#479)\n\t- tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1) (contracts/src/dev/LDYStaking.sol#485)\n", + "markdown": "[WIP_LDYStaking.tierOf(address)](contracts/src/dev/LDYStaking.sol#L474-L486) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [_tiers.length < 1 || stakedAmount < getTier(1)](contracts/src/dev/LDYStaking.sol#L479)\n\t- [tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)](contracts/src/dev/LDYStaking.sol#L485)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L474-L486", + "id": "310044de4d7f2dd7af791b99a13a2eb5c79282d41bfe1c81d2c755e61c44a3ac", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "notBlacklisted", + "source_mapping": { + "start": 2233, + "length": 115, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [57, 58, 59, 60], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 872, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "notBlacklisted(address)" + } + }, + { + "type": "node", + "name": "require(bool,string)(isBlacklisted(account) == false,L9)", + "source_mapping": { + "start": 2284, + "length": 46, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [58], + "starting_column": 9, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "notBlacklisted", + "source_mapping": { + "start": 2233, + "length": 115, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [57, 58, 59, 60], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 872, + "length": 2106, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "notBlacklisted(address)" + } + } + } + } + ], + "description": "GlobalRestrictableUpgradeable.notBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#57-60) compares to a boolean constant:\n\t-require(bool,string)(isBlacklisted(account) == false,L9) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#58)\n", + "markdown": "[GlobalRestrictableUpgradeable.notBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L57-L60) compares to a boolean constant:\n\t-[require(bool,string)(isBlacklisted(account) == false,L9)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L57-L60", + "id": "3ef58163b2d398a5db7307389644ededccc07ee4344b1a82fb6ba4afd7e9e020", + "check": "boolean-equal", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31083, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [748], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#748)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L748)\n", + "first_markdown_element": "contracts/src/LToken.sol#L721-L820", + "id": "60b39ec7acc7601520519cb502cdd7b59d228895d023787d8c7bf783423f2f84", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 31569, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [758], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#758)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L758)\n", + "first_markdown_element": "contracts/src/LToken.sol#L721-L820", + "id": "44c96ebce2a3c704283a9fb2f1fb9606fb514cfdd5d33c15c830059885787071", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 32824, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [790], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 29646, + "length": 4535, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#721-820) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#790)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L721-L820) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L790)\n", + "first_markdown_element": "contracts/src/LToken.sol#L721-L820", + "id": "d217ad8a86a8319b1bc8d2d260b93c53bee52011b5104689266910aa85e55b9d", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "toRate", + "source_mapping": { + "start": 6296, + "length": 318, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [133, 134, 135, 136, 137, 138, 139], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "SUD", + "source_mapping": { + "start": 3899, + "length": 3844, + "filename_relative": "contracts/src/libs/SUD.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/libs/SUD.sol", + "filename_short": "contracts/src/libs/SUD.sol", + "is_dependency": false, + "lines": [ + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "toRate(uint256,uint256)" + } + } + ], + "description": "SUD.toRate(uint256,uint256) (contracts/src/libs/SUD.sol#133-139) is never used and should be removed\n", + "markdown": "[SUD.toRate(uint256,uint256)](contracts/src/libs/SUD.sol#L133-L139) is never used and should be removed\n", + "first_markdown_element": "contracts/src/libs/SUD.sol#L133-L139", + "id": "36a48f95f9b7c5fe1b49f7b728d4d36d158a8314fbd9a2723a79c915b79c17a6", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27520, + "length": 1876, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 29306, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [712], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 27520, + "length": 1876, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#661-714):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#712)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L661-L714):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L712)\n", + "first_markdown_element": "contracts/src/LToken.sol#L661-L714", + "id": "5da8691e2be78c683a9175ced74af96bd9f04869096ffa8369a1066b2c6032ad", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "MAX_RETENTION_RATE_UD7x3", + "source_mapping": { + "start": 3787, + "length": 63, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [84], + "starting_column": 5, + "ending_column": 68 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" + } + } + ], + "description": "Constant LToken.MAX_RETENTION_RATE_UD7x3 (contracts/src/LToken.sol#84) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [LToken.MAX_RETENTION_RATE_UD7x3](contracts/src/LToken.sol#L84) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "contracts/src/LToken.sol#L84", + "id": "7ff677b2ae0c9304bb57945560d05368b0eba35bea8462b05eaa5f7ee925ac16", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + }, + "additional_fields": { "target": "contract", "convention": "CapWords" } + } + ], + "description": "Contract WIP_LDYStaking (contracts/src/dev/LDYStaking.sol#34-487) is not in CapWords\n", + "markdown": "Contract [WIP_LDYStaking](contracts/src/dev/LDYStaking.sol#L34-L487) is not in CapWords\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L34-L487", + "id": "d55206aaa8c3068db513bd25fdc82937384e6172b288f79f86dd80895928086c", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "HUNDRED_UD60x18", + "source_mapping": { + "start": 1945, + "length": 53, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [48], + "starting_column": 5, + "ending_column": 58 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" + } + } + ], + "description": "Constant WIP_LDYStaking.HUNDRED_UD60x18 (contracts/src/dev/LDYStaking.sol#48) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [WIP_LDYStaking.HUNDRED_UD60x18](contracts/src/dev/LDYStaking.sol#L48) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L48", + "id": "7cf7b7740f792aa73ca2219585de054d4f479a32848bfbf0761a989d34323451", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_tiers", + "source_mapping": { + "start": 2438, + "length": 16, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [60], + "starting_column": 5, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable WIP_LDYStaking._tiers (contracts/src/dev/LDYStaking.sol#60) is not in mixedCase\n", + "markdown": "Variable [WIP_LDYStaking._tiers](contracts/src/dev/LDYStaking.sol#L60) is not in mixedCase\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L60", + "id": "c6011534f4334d8a364d5d4846e7b3d289e8b46392c613cfdbf784c2fe6b6529", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 756, + "length": 7, + "filename_relative": "contracts/src/DummyLDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", + "filename_short": "contracts/src/DummyLDYStaking.sol", + "is_dependency": false, + "lines": [24], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 678, + "length": 154, + "filename_relative": "contracts/src/DummyLDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", + "filename_short": "contracts/src/DummyLDYStaking.sol", + "is_dependency": false, + "lines": [23, 24, 25, 26], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 486, + "length": 348, + "filename_relative": "contracts/src/DummyLDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", + "filename_short": "contracts/src/DummyLDYStaking.sol", + "is_dependency": false, + "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + }, + { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 486, + "length": 348, + "filename_relative": "contracts/src/DummyLDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/DummyLDYStaking.sol", + "filename_short": "contracts/src/DummyLDYStaking.sol", + "is_dependency": false, + "lines": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/DummyLDYStaking.sol#24)\" inLDYStaking (contracts/src/DummyLDYStaking.sol#17-27)\n", + "markdown": "Redundant expression \"[account](contracts/src/DummyLDYStaking.sol#L24)\" in[LDYStaking](contracts/src/DummyLDYStaking.sol#L17-L27)\n", + "first_markdown_element": "contracts/src/DummyLDYStaking.sol#L24", + "id": "f68604b46e819d0fa57c9f689da378b7d0600cbd477c02f2526f64e87559445e", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 22623, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [543], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22524, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [542, 543, 544, 545, 546], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#543)\" inLToken (contracts/src/LToken.sol#56-974)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L543)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", + "first_markdown_element": "contracts/src/LToken.sol#L543", + "id": "abd7f6916d8d7b3a55c564ca5fe476fd5689b575c442b6bd74b163cd1a6e1b4a", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 22684, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [544], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 22524, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [542, 543, 544, 545, 546], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#544)\" inLToken (contracts/src/LToken.sol#56-974)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L544)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", + "first_markdown_element": "contracts/src/LToken.sol#L544", + "id": "a783dd20459876d6eb91cfc9a2c9c8dd5cbb53f205a2089a4fd0fc74b5eb3b75", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 23001, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [554], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 22902, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [553, 554, 555, 556, 557], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#554)\" inLToken (contracts/src/LToken.sol#56-974)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L554)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", + "first_markdown_element": "contracts/src/LToken.sol#L554", + "id": "4f0e59d0e0aa873b15369220a6b78194e433ba6ef821cf3b7cd3474cc52f99fe", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 23062, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [555], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 22902, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [553, 554, 555, 556, 557], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, + 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, + 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 2925, + "length": 37278, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#555)\" inLToken (contracts/src/LToken.sol#56-974)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L555)\" in[LToken](contracts/src/LToken.sol#L56-L974)\n", + "first_markdown_element": "contracts/src/LToken.sol#L555", + "id": "4351c647453c18c3161b4db61b345622d45ac2a997ee88b25a53177787c769d1", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "newOwner", + "source_mapping": { + "start": 2882, + "length": 8, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [69], + "starting_column": 9, + "ending_column": 17 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "transferOwnership", + "source_mapping": { + "start": 2796, + "length": 167, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [68, 69, 70, 71], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 936, + "length": 2603, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "transferOwnership(address)" + } + } + } + }, + { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 936, + "length": 2603, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"newOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#69)\" inGlobalOwnableUpgradeable (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#23-87)\n", + "markdown": "Redundant expression \"[newOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L69)\" in[GlobalOwnableUpgradeable](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L23-L87)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L69", + "id": "6ca5e1ccadadb16552eb5f1cd5fba94b88033fb21b641a4fa671a66ec877f441", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 9701, + "length": 7, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [238], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9598, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [237, 238, 239, 240, 241], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#238)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-448)\n", + "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L238)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L448)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L238", + "id": "08c5770fce2ae9da36a7f36b1c8df2b4f518bb09df6ecd7d66b8a8993b166b87", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 9754, + "length": 6, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [239], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 9598, + "length": 191, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [237, 238, 239, 240, 241], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 2383, + "length": 17281, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#239)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#51-448)\n", + "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L239)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L51-L448)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L239", + "id": "c5e224c37bbb63ad5b6b628894161fe6da90731c79f44e0163ce4f24ada5d709", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "HUNDRED_UD60x18", + "source_mapping": { + "start": 1945, + "length": 53, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [48], + "starting_column": 5, + "ending_column": 58 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "contract", + "name": "WIP_LDYStaking", + "source_mapping": { + "start": 1433, + "length": 18058, + "filename_relative": "contracts/src/dev/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/Ledgity-Yield/contracts/src/dev/LDYStaking.sol", + "filename_short": "contracts/src/dev/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "WIP_LDYStaking.HUNDRED_UD60x18 (contracts/src/dev/LDYStaking.sol#48) is never used in WIP_LDYStaking (contracts/src/dev/LDYStaking.sol#34-487)\n", + "markdown": "[WIP_LDYStaking.HUNDRED_UD60x18](contracts/src/dev/LDYStaking.sol#L48) is never used in [WIP_LDYStaking](contracts/src/dev/LDYStaking.sol#L34-L487)\n", + "first_markdown_element": "contracts/src/dev/LDYStaking.sol#L48", + "id": "dc9e7e1f98854f7a99f94e4d1ef6c8a6cb92273b2b9e42dee64531c781ad9923", + "check": "unused-state", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_tiers", + "source_mapping": { + "start": 2195, + "length": 16, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [54], + "starting_column": 5, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17518, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable LDYStaking._tiers (contracts/src/LDYStaking.sol#54) is not in mixedCase\n", + "markdown": "Variable [LDYStaking._tiers](contracts/src/LDYStaking.sol#L54) is not in mixedCase\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L54", + "id": "4db11b0614b38bc0cfaf589013650817958efd5a9a28f80cf01033aace82e3bc", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24191, + "length": 3942, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "underlying().safeTransfer(request.account,withdrawnAmount)", + "source_mapping": { + "start": 27482, + "length": 59, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [671], + "starting_column": 17, + "ending_column": 76 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24191, + "length": 3942, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "external_calls" } + }, + { + "type": "node", + "name": "ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)", + "source_mapping": { + "start": 26727, + "length": 262, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [654, 655, 656, 657, 658, 659, 660, 661], + "starting_column": 17, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24191, + "length": 3942, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + }, + "additional_fields": { "underlying_type": "event" } + } + ], + "description": "Reentrancy in LToken.processQueuedRequests() (contracts/src/LToken.sol#600-689):\n\tExternal calls:\n\t- underlying().safeTransfer(request.account,withdrawnAmount) (contracts/src/LToken.sol#671)\n\tEvent emitted after the call(s):\n\t- ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success) (contracts/src/LToken.sol#654-661)\n", + "markdown": "Reentrancy in [LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L689):\n\tExternal calls:\n\t- [underlying().safeTransfer(request.account,withdrawnAmount)](contracts/src/LToken.sol#L671)\n\tEvent emitted after the call(s):\n\t- [ActivityEvent(int256(nextRequestId),request.account,Action.Withdraw,request.amount,withdrawnAmount,Status.Success)](contracts/src/LToken.sol#L654-L661)\n", + "first_markdown_element": "contracts/src/LToken.sol#L600-L689", + "id": "1d85f1833ff36ff8eaccb97d8ba1d69c57a6e3ac590dbc265bdb00f383471acf", + "check": "reentrancy-events", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processBigQueuedRequest", + "source_mapping": { + "start": 28691, + "length": 2454, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processBigQueuedRequest(uint256)" + } + }, + { + "type": "node", + "name": "require(bool,string)(request.amount > getExpectedRetained() / 2,L51)", + "source_mapping": { + "start": 29128, + "length": 58, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [709], + "starting_column": 9, + "ending_column": 67 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processBigQueuedRequest", + "source_mapping": { + "start": 28691, + "length": 2454, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processBigQueuedRequest(uint256)" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)", + "source_mapping": { + "start": 29548, + "length": 66, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [719], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processBigQueuedRequest", + "source_mapping": { + "start": 28691, + "length": 2454, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, + 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processBigQueuedRequest(uint256)" + } + } + } + } + ], + "description": "LToken.processBigQueuedRequest(uint256) (contracts/src/LToken.sol#701-760) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(request.amount > getExpectedRetained() / 2,L51) (contracts/src/LToken.sol#709)\n\t- require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52) (contracts/src/LToken.sol#719)\n", + "markdown": "[LToken.processBigQueuedRequest(uint256)](contracts/src/LToken.sol#L701-L760) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(request.amount > getExpectedRetained() / 2,L51)](contracts/src/LToken.sol#L709)\n\t- [require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)](contracts/src/LToken.sol#L719)\n", + "first_markdown_element": "contracts/src/LToken.sol#L701-L760", + "id": "93b1ed31bec746644d44b4202d0e55cca4b9d114793ad3fed57f4d533a794850", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "repatriate", + "source_mapping": { + "start": 34958, + "length": 642, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "repatriate(uint256)" + } + }, + { + "type": "node", + "name": "require(bool,string)(newBalance <= getExpectedRetained(),L59)", + "source_mapping": { + "start": 35325, + "length": 51, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [873], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "repatriate", + "source_mapping": { + "start": 34958, + "length": 642, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "repatriate(uint256)" + } + } + } + } + ], + "description": "LToken.repatriate(uint256) (contracts/src/LToken.sol#865-880) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(newBalance <= getExpectedRetained(),L59) (contracts/src/LToken.sol#873)\n", + "markdown": "[LToken.repatriate(uint256)](contracts/src/LToken.sol#L865-L880) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(newBalance <= getExpectedRetained(),L59)](contracts/src/LToken.sol#L873)\n", + "first_markdown_element": "contracts/src/LToken.sol#L865-L880", + "id": "5aa366c4a309f52f6c4cfa99dc70d0c38e51839dd08e2c0245ba0124a8b7de3e", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "claimFees", + "source_mapping": { + "start": 35709, + "length": 534, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "claimFees()" + } + }, + { + "type": "node", + "name": "require(bool,string)(usableUnderlyings >= unclaimedFees,L61)", + "source_mapping": { + "start": 35912, + "length": 50, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [890], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "claimFees", + "source_mapping": { + "start": 35709, + "length": 534, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "claimFees()" + } + } + } + } + ], + "description": "LToken.claimFees() (contracts/src/LToken.sol#885-900) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(usableUnderlyings >= unclaimedFees,L61) (contracts/src/LToken.sol#890)\n", + "markdown": "[LToken.claimFees()](contracts/src/LToken.sol#L885-L900) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(usableUnderlyings >= unclaimedFees,L61)](contracts/src/LToken.sol#L890)\n", + "first_markdown_element": "contracts/src/LToken.sol#L885-L900", + "id": "961a4862262c7e49fc22f18fd8b7e9e405fda93d702b15e4e424736b298b9d58", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31501, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 33250, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [820], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31501, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, + 821, 822 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34694, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#769-822):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#820)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L769-L822):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L820)\n", + "first_markdown_element": "contracts/src/LToken.sol#L769-L822", + "id": "0438ad76c00265ff91b9698e2b03be6e1909f1c58f98ca3d2cb18c428841c643", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "repatriate", + "source_mapping": { + "start": 34739, + "length": 642, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "repatriate(uint256)" + } + }, + { + "type": "node", + "name": "require(bool,string)(newBalance <= getExpectedRetained(),L59)", + "source_mapping": { + "start": 35106, + "length": 51, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [870], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "repatriate", + "source_mapping": { + "start": 34739, + "length": 642, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "repatriate(uint256)" + } + } + } + } + ], + "description": "LToken.repatriate(uint256) (contracts/src/LToken.sol#862-877) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(newBalance <= getExpectedRetained(),L59) (contracts/src/LToken.sol#870)\n", + "markdown": "[LToken.repatriate(uint256)](contracts/src/LToken.sol#L862-L877) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(newBalance <= getExpectedRetained(),L59)](contracts/src/LToken.sol#L870)\n", + "first_markdown_element": "contracts/src/LToken.sol#L862-L877", + "id": "562727876ae5bb469dea656307b3f0a52ee15f46534efe07ab25dc397e245fe9", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "claimFees", + "source_mapping": { + "start": 35490, + "length": 534, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "claimFees()" + } + }, + { + "type": "node", + "name": "require(bool,string)(usableUnderlyings >= unclaimedFees,L61)", + "source_mapping": { + "start": 35693, + "length": 50, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [887], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "claimFees", + "source_mapping": { + "start": 35490, + "length": 534, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "claimFees()" + } + } + } + } + ], + "description": "LToken.claimFees() (contracts/src/LToken.sol#882-897) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(usableUnderlyings >= unclaimedFees,L61) (contracts/src/LToken.sol#887)\n", + "markdown": "[LToken.claimFees()](contracts/src/LToken.sol#L882-L897) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(usableUnderlyings >= unclaimedFees,L61)](contracts/src/LToken.sol#L887)\n", + "first_markdown_element": "contracts/src/LToken.sol#L882-L897", + "id": "f7c60596c5ac8edf5681b6bbc03f2af3df9827f0cee758939f4c46a1e6f02c0e", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24191, + "length": 3723, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 27041, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [664], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24191, + "length": 3723, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#664)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L664)\n", + "first_markdown_element": "contracts/src/LToken.sol#L600-L686", + "id": "83208b3cba4b6f22201c14232d0adfe0f8d8e63c255a692e4edbc9bcc0b218e4", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31282, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 33031, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [817], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31282, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34475, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#766-819):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#817)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L766-L819):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L817)\n", + "first_markdown_element": "contracts/src/LToken.sol#L766-L819", + "id": "a181084cb5d30c935835c17df4e46697693fcff936f8c9248d56f241b16f721a", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "fuel", + "source_mapping": { + "start": 9641, + "length": 348, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "fuel(uint256)" + } + }, + { + "type": "node", + "name": "rewardsReserve += amount", + "source_mapping": { + "start": 9818, + "length": 24, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [236], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "fuel", + "source_mapping": { + "start": 9641, + "length": 348, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [231, 232, 233, 234, 235, 236, 237, 238, 239, 240], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "fuel(uint256)" + } + } + } + } + ], + "description": "LDYStaking.fuel(uint256) (contracts/src/LDYStaking.sol#231-240) should emit an event for: \n\t- rewardsReserve += amount (contracts/src/LDYStaking.sol#236) \n", + "markdown": "[LDYStaking.fuel(uint256)](contracts/src/LDYStaking.sol#L231-L240) should emit an event for: \n\t- [rewardsReserve += amount](contracts/src/LDYStaking.sol#L236) \n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L231-L240", + "id": "6d01d179747ee55b13a43430959b8311eaad7f92f3d24f61b024a4e441617edc", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10198, + "length": 1001, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + }, + { + "type": "node", + "name": "require(bool,string)(accountStake.lockEnd > block.timestamp,L24)", + "source_mapping": { + "start": 10441, + "length": 54, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [252], + "starting_column": 9, + "ending_column": 63 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10198, + "length": 1001, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + } + } + } + ], + "description": "LDYStaking.unlock() (contracts/src/LDYStaking.sol#247-271) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(accountStake.lockEnd > block.timestamp,L24) (contracts/src/LDYStaking.sol#252)\n", + "markdown": "[LDYStaking.unlock()](contracts/src/LDYStaking.sol#L247-L271) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(accountStake.lockEnd > block.timestamp,L24)](contracts/src/LDYStaking.sol#L252)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L247-L271", + "id": "af82a4504633db737ad6b57c4f762b0ea09d4573d27414e83229dd65e85fe8e6", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 12624, + "length": 1091, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + }, + { + "type": "node", + "name": "require(bool,string)(stakeOf(_msgSender()) >= amount,L28)", + "source_mapping": { + "start": 12858, + "length": 47, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [316], + "starting_column": 9, + "ending_column": 56 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 12624, + "length": 1091, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)", + "source_mapping": { + "start": 13082, + "length": 55, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [322], + "starting_column": 9, + "ending_column": 64 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 12624, + "length": 1091, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + } + } + } + ], + "description": "LDYStaking.unstake(uint216) (contracts/src/LDYStaking.sol#311-339) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(stakeOf(_msgSender()) >= amount,L28) (contracts/src/LDYStaking.sol#316)\n\t- require(bool,string)(accountStake.lockEnd <= block.timestamp,L29) (contracts/src/LDYStaking.sol#322)\n", + "markdown": "[LDYStaking.unstake(uint216)](contracts/src/LDYStaking.sol#L311-L339) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(stakeOf(_msgSender()) >= amount,L28)](contracts/src/LDYStaking.sol#L316)\n\t- [require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)](contracts/src/LDYStaking.sol#L322)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L311-L339", + "id": "139ddf6198e6707bc16a01c7c25289d1eee24014a6a47ad210ce11f2b7113a2b", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18254, + "length": 564, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + }, + { + "type": "node", + "name": "_tiers.length < 1 || stakedAmount < getTier(1)", + "source_mapping": { + "start": 18497, + "length": 46, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [466], + "starting_column": 13, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18254, + "length": 564, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + }, + { + "type": "node", + "name": "tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)", + "source_mapping": { + "start": 18741, + "length": 62, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [472], + "starting_column": 16, + "ending_column": 78 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18254, + "length": 564, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17526, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + } + ], + "description": "LDYStaking.tierOf(address) (contracts/src/LDYStaking.sol#461-473) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _tiers.length < 1 || stakedAmount < getTier(1) (contracts/src/LDYStaking.sol#466)\n\t- tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1) (contracts/src/LDYStaking.sol#472)\n", + "markdown": "[LDYStaking.tierOf(address)](contracts/src/LDYStaking.sol#L461-L473) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [_tiers.length < 1 || stakedAmount < getTier(1)](contracts/src/LDYStaking.sol#L466)\n\t- [tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)](contracts/src/LDYStaking.sol#L472)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L461-L473", + "id": "6227c9c239759c5f563b43fb34c0dfde383f2c8480e0825a852e4e994daf6b95", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31063, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34256, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 32812, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [811], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31063, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34256, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#760-813):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#811)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L760-L813):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L811)\n", + "first_markdown_element": "contracts/src/LToken.sol#L760-L813", + "id": "924b383049c62b938ef8f17b4a24fe4cf9d57a5a733659d508057b74bc6c1a86", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31065, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "(sent) = withdrawer.call{value: msg.value}()", + "source_mapping": { + "start": 31614, + "length": 53, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [773], + "starting_column": 9, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "requestWithdrawal", + "source_mapping": { + "start": 31065, + "length": 1839, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "requestWithdrawal(uint256)" + } + } + } + } + ], + "description": "Low level call in LToken.requestWithdrawal(uint256) (contracts/src/LToken.sol#760-813):\n\t- (sent) = withdrawer.call{value: msg.value}() (contracts/src/LToken.sol#773)\n", + "markdown": "Low level call in [LToken.requestWithdrawal(uint256)](contracts/src/LToken.sol#L760-L813):\n\t- [(sent) = withdrawer.call{value: msg.value}()](contracts/src/LToken.sol#L773)\n", + "first_markdown_element": "contracts/src/LToken.sol#L760-L813", + "id": "d741b84731304ecbdff9bb98c6d3fed597a29fd8010e7f70f43b697ae5a01462", + "check": "low-level-calls", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 8807, + "length": 309, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [236, 237, 238, 239, 240, 241, 242, 243], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + }, + { + "type": "node", + "name": "withdrawer = withdrawer_", + "source_mapping": { + "start": 9085, + "length": 24, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [242], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setWithdrawer", + "source_mapping": { + "start": 8807, + "length": 309, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [236, 237, 238, 239, 240, 241, 242, 243], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setWithdrawer(address)" + } + } + } + } + ], + "description": "LToken.setWithdrawer(address) (contracts/src/LToken.sol#236-243) should emit an event for: \n\t- withdrawer = withdrawer_ (contracts/src/LToken.sol#242) \n", + "markdown": "[LToken.setWithdrawer(address)](contracts/src/LToken.sol#L236-L243) should emit an event for: \n\t- [withdrawer = withdrawer_](contracts/src/LToken.sol#L242) \n", + "first_markdown_element": "contracts/src/LToken.sol#L236-L243", + "id": "036cf7fc9ab80ae726f49d03d874e8c240f7ab8a37d3ec19953918102fea88c6", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 9241, + "length": 271, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [249, 250, 251, 252, 253, 254, 255, 256], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + }, + { + "type": "node", + "name": "fund = fund_", + "source_mapping": { + "start": 9493, + "length": 12, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [255], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFund", + "source_mapping": { + "start": 9241, + "length": 271, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [249, 250, 251, 252, 253, 254, 255, 256], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFund(address)" + } + } + } + } + ], + "description": "LToken.setFund(address) (contracts/src/LToken.sol#249-256) should emit an event for: \n\t- fund = fund_ (contracts/src/LToken.sol#255) \n", + "markdown": "[LToken.setFund(address)](contracts/src/LToken.sol#L249-L256) should emit an event for: \n\t- [fund = fund_](contracts/src/LToken.sol#L255) \n", + "first_markdown_element": "contracts/src/LToken.sol#L249-L256", + "id": "4e2baec0aa7e231899515b62b97cec2bb89771ceb4c66876369cb84e7cee6bbc", + "check": "events-access", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + }, + { + "type": "node", + "name": "growthRateSUD = (addedAmountSUD * _toSUD(100)) / accountStakeSUD", + "source_mapping": { + "start": 7096, + "length": 76, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [173], + "starting_column": 9, + "ending_column": 85 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "lockEndIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / _toSUD(100)", + "source_mapping": { + "start": 7722, + "length": 77, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [185], + "starting_column": 13, + "ending_column": 90 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + } + ], + "description": "LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/LDYStaking.sol#160-199) performs a multiplication on the result of a division:\n\t- growthRateSUD = (addedAmountSUD * _toSUD(100)) / accountStakeSUD (contracts/src/LDYStaking.sol#173)\n\t- lockEndIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / _toSUD(100) (contracts/src/LDYStaking.sol#185)\n", + "markdown": "[LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/LDYStaking.sol#L160-L199) performs a multiplication on the result of a division:\n\t- [growthRateSUD = (addedAmountSUD * _toSUD(100)) / accountStakeSUD](contracts/src/LDYStaking.sol#L173)\n\t- [lockEndIncreaseSUD = (stakeLockDurationSUD * growthRateSUD) / _toSUD(100)](contracts/src/LDYStaking.sol#L185)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L160-L199", + "id": "8e5aa6e7c19012e6e8ad1543c95f00659c467da2e407efb5fa093f0dd777559c", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10506, + "length": 868, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "elapsedYearsSUD = (elaspedTimeSUD * _toSUD(1)) / _toSUD(31536000)", + "source_mapping": { + "start": 10819, + "length": 77, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [276], + "starting_column": 9, + "ending_column": 86 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10506, + "length": 868, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)", + "source_mapping": { + "start": 11034, + "length": 62, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [280], + "starting_column": 9, + "ending_column": 71 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10506, + "length": 868, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#268-286) performs a multiplication on the result of a division:\n\t- elapsedYearsSUD = (elaspedTimeSUD * _toSUD(1)) / _toSUD(31536000) (contracts/src/abstracts/InvestUpgradeable.sol#276)\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1) (contracts/src/abstracts/InvestUpgradeable.sol#280)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L268-L286) performs a multiplication on the result of a division:\n\t- [elapsedYearsSUD = (elaspedTimeSUD * _toSUD(1)) / _toSUD(31536000)](contracts/src/abstracts/InvestUpgradeable.sol#L276)\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)](contracts/src/abstracts/InvestUpgradeable.sol#L280)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L268-L286", + "id": "de9c660a978ad1ed964f186a2791f28e954df2ce5cff7ccbb8fff9371eb46e00", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10506, + "length": 868, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + }, + { + "type": "node", + "name": "growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)", + "source_mapping": { + "start": 11034, + "length": 62, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [280], + "starting_column": 9, + "ending_column": 71 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10506, + "length": 868, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + }, + { + "type": "node", + "name": "rewardsSUD = (investedAmountSUD * growthSUD) / _toSUD(100)", + "source_mapping": { + "start": 11214, + "length": 70, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [284], + "starting_column": 9, + "ending_column": 79 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_calculatePeriodRewards", + "source_mapping": { + "start": 10506, + "length": 868, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_calculatePeriodRewards(uint40,uint40,uint16,uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256) (contracts/src/abstracts/InvestUpgradeable.sol#268-286) performs a multiplication on the result of a division:\n\t- growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1) (contracts/src/abstracts/InvestUpgradeable.sol#280)\n\t- rewardsSUD = (investedAmountSUD * growthSUD) / _toSUD(100) (contracts/src/abstracts/InvestUpgradeable.sol#284)\n", + "markdown": "[InvestUpgradeable._calculatePeriodRewards(uint40,uint40,uint16,uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L268-L286) performs a multiplication on the result of a division:\n\t- [growthSUD = (elapsedYearsSUD * aprSUD) / _toSUD(1)](contracts/src/abstracts/InvestUpgradeable.sol#L280)\n\t- [rewardsSUD = (investedAmountSUD * growthSUD) / _toSUD(100)](contracts/src/abstracts/InvestUpgradeable.sol#L284)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L268-L286", + "id": "edd240cb67664555ec3320c4e3cd6a6a757f300b9150239aa95211540d9b3c2c", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + }, + { + "type": "node", + "name": "accountStake.amount == 0", + "source_mapping": { + "start": 6860, + "length": 24, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [168], + "starting_column": 13, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + } + ], + "description": "LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/LDYStaking.sol#160-199) uses a dangerous strict equality:\n\t- accountStake.amount == 0 (contracts/src/LDYStaking.sol#168)\n", + "markdown": "[LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/LDYStaking.sol#L160-L199) uses a dangerous strict equality:\n\t- [accountStake.amount == 0](contracts/src/LDYStaking.sol#L168)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L160-L199", + "id": "9a6c62711cfdc22aff9f71cc36f6a0cb01064417d6363746f173617f54d8d176", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17851, + "length": 1811, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsInfos[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18305, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [422], + "starting_column": 13, + "ending_column": 79 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17851, + "length": 1811, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#415-453) uses a dangerous strict equality:\n\t- accountsInfos[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#422)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L415-L453) uses a dangerous strict equality:\n\t- [accountsInfos[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L422)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L415-L453", + "id": "ce88587a147e1e7308593f97bc13bd79909eb1b0e747d3c3f17ef70a31daac76", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_isClaiming", + "source_mapping": { + "start": 3220, + "length": 24, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [73], + "starting_column": 5, + "ending_column": 29 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = true", + "source_mapping": { + "start": 19216, + "length": 18, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [443], + "starting_column": 13, + "ending_column": 31 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17851, + "length": 1811, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + }, + { + "type": "node", + "name": "_isClaiming = false", + "source_mapping": { + "start": 19317, + "length": 19, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [445], + "starting_column": 13, + "ending_column": 32 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17851, + "length": 1811, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._isClaiming (contracts/src/abstracts/InvestUpgradeable.sol#73) is written in both\n\t_isClaiming = true (contracts/src/abstracts/InvestUpgradeable.sol#443)\n\t_isClaiming = false (contracts/src/abstracts/InvestUpgradeable.sol#445)\n", + "markdown": "[InvestUpgradeable._isClaiming](contracts/src/abstracts/InvestUpgradeable.sol#L73) is written in both\n\t[_isClaiming = true](contracts/src/abstracts/InvestUpgradeable.sol#L443)\n\t[_isClaiming = false](contracts/src/abstracts/InvestUpgradeable.sol#L445)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L73", + "id": "9cc9bcadf655d3be4572dafc62236376b1fd04b4f2b4b1d5e5286f89adb14450", + "check": "write-after-write", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "setUnlockFeesRate", + "source_mapping": { + "start": 9072, + "length": 126, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [215, 216, 217], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setUnlockFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "unlockFeesRateUD7x3 = unlockFeesRateUD7x3_", + "source_mapping": { + "start": 9153, + "length": 38, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [216], + "starting_column": 9, + "ending_column": 47 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setUnlockFeesRate", + "source_mapping": { + "start": 9072, + "length": 126, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [215, 216, 217], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setUnlockFeesRate(uint32)" + } + } + } + } + ], + "description": "LDYStaking.setUnlockFeesRate(uint32) (contracts/src/LDYStaking.sol#215-217) should emit an event for: \n\t- unlockFeesRateUD7x3 = unlockFeesRateUD7x3_ (contracts/src/LDYStaking.sol#216) \n", + "markdown": "[LDYStaking.setUnlockFeesRate(uint32)](contracts/src/LDYStaking.sol#L215-L217) should emit an event for: \n\t- [unlockFeesRateUD7x3 = unlockFeesRateUD7x3_](contracts/src/LDYStaking.sol#L216) \n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L215-L217", + "id": "0c4f51e21561cd5f48e20ec48724e7e5219df4815dfd5b947a98517e2ac121bf", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setStakeLockDuration", + "source_mapping": { + "start": 9351, + "length": 129, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [223, 224, 225], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setStakeLockDuration(uint40)" + } + }, + { + "type": "node", + "name": "stakeLockDuration = stakeLockDuration_", + "source_mapping": { + "start": 9435, + "length": 38, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [224], + "starting_column": 9, + "ending_column": 47 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setStakeLockDuration", + "source_mapping": { + "start": 9351, + "length": 129, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [223, 224, 225], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setStakeLockDuration(uint40)" + } + } + } + } + ], + "description": "LDYStaking.setStakeLockDuration(uint40) (contracts/src/LDYStaking.sol#223-225) should emit an event for: \n\t- stakeLockDuration = stakeLockDuration_ (contracts/src/LDYStaking.sol#224) \n", + "markdown": "[LDYStaking.setStakeLockDuration(uint40)](contracts/src/LDYStaking.sol#L223-L225) should emit an event for: \n\t- [stakeLockDuration = stakeLockDuration_](contracts/src/LDYStaking.sol#L224) \n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L223-L225", + "id": "6e4ce598f465fc7f714564873bdf730ecb45de8ee772cd2a7126b3cc0da0e59d", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "fuel", + "source_mapping": { + "start": 9641, + "length": 304, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [231, 232, 233, 234, 235, 236, 237, 238], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "fuel(uint256)" + } + }, + { + "type": "node", + "name": "rewardsReserve += amount", + "source_mapping": { + "start": 9914, + "length": 24, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [237], + "starting_column": 9, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "fuel", + "source_mapping": { + "start": 9641, + "length": 304, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [231, 232, 233, 234, 235, 236, 237, 238], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "fuel(uint256)" + } + } + } + } + ], + "description": "LDYStaking.fuel(uint256) (contracts/src/LDYStaking.sol#231-238) should emit an event for: \n\t- rewardsReserve += amount (contracts/src/LDYStaking.sol#237) \n", + "markdown": "[LDYStaking.fuel(uint256)](contracts/src/LDYStaking.sol#L231-L238) should emit an event for: \n\t- [rewardsReserve += amount](contracts/src/LDYStaking.sol#L237) \n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L231-L238", + "id": "64b923f0ea10991e0b7c25cb18166c776d819516fee92d92068728d09516f45f", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 7747, + "length": 102, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [208, 209, 210], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + }, + { + "type": "node", + "name": "feesRateUD7x3 = feesRateUD7x3_", + "source_mapping": { + "start": 7816, + "length": 26, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [209], + "starting_column": 9, + "ending_column": 35 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 7747, + "length": 102, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [208, 209, 210], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + } + ], + "description": "LToken.setFeesRate(uint32) (contracts/src/LToken.sol#208-210) should emit an event for: \n\t- feesRateUD7x3 = feesRateUD7x3_ (contracts/src/LToken.sol#209) \n", + "markdown": "[LToken.setFeesRate(uint32)](contracts/src/LToken.sol#L208-L210) should emit an event for: \n\t- [feesRateUD7x3 = feesRateUD7x3_](contracts/src/LToken.sol#L209) \n", + "first_markdown_element": "contracts/src/LToken.sol#L208-L210", + "id": "bd1886da47f3f17db675dc2f0504397d1cb0e95289d6f05915bc9351bb957daa", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 8200, + "length": 185, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [219, 220, 221, 222], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + }, + { + "type": "node", + "name": "retentionRateUD7x3 = retentionRateUD7x3_", + "source_mapping": { + "start": 8342, + "length": 36, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [221], + "starting_column": 9, + "ending_column": 45 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 8200, + "length": 185, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [219, 220, 221, 222], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + } + ], + "description": "LToken.setRetentionRate(uint32) (contracts/src/LToken.sol#219-222) should emit an event for: \n\t- retentionRateUD7x3 = retentionRateUD7x3_ (contracts/src/LToken.sol#221) \n", + "markdown": "[LToken.setRetentionRate(uint32)](contracts/src/LToken.sol#L219-L222) should emit an event for: \n\t- [retentionRateUD7x3 = retentionRateUD7x3_](contracts/src/LToken.sol#L221) \n", + "first_markdown_element": "contracts/src/LToken.sol#L219-L222", + "id": "ed349a46c15f7fca6087c5a6ce53b304076e0c64649e7780d5b8ee3217ebe903", + "check": "events-maths", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "isBlacklisted", + "source_mapping": { + "start": 2381, + "length": 132, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [58, 59, 60], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "isBlacklisted(address)" + } + }, + { + "type": "node", + "name": "_globalBlacklist.isBlacklisted(account)", + "source_mapping": { + "start": 2460, + "length": 46, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [59], + "starting_column": 9, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "isBlacklisted", + "source_mapping": { + "start": 2381, + "length": 132, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [58, 59, 60], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "isBlacklisted(address)" + } + } + } + } + ], + "description": "GlobalRestrictableUpgradeable.isBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#58-60) has external calls inside a loop: _globalBlacklist.isBlacklisted(account) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#59)\n", + "markdown": "[GlobalRestrictableUpgradeable.isBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L60) has external calls inside a loop: [_globalBlacklist.isBlacklisted(account)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L59)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L58-L60", + "id": "092edb153b923971dc44ef96ef010e83fddfc252ac0be5af66f319fead6067d2", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_toDecimals", + "source_mapping": { + "start": 8779, + "length": 192, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [225, 226, 227, 228], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_toDecimals(uint256)" + } + }, + { + "type": "node", + "name": "decimals = IERC20MetadataUpgradeable(address(invested())).decimals()", + "source_mapping": { + "start": 8853, + "length": 76, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [226], + "starting_column": 9, + "ending_column": 85 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_toDecimals", + "source_mapping": { + "start": 8779, + "length": 192, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [225, 226, 227, 228], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_toDecimals(uint256)" + } + } + } + } + ], + "description": "InvestUpgradeable._toDecimals(uint256) (contracts/src/abstracts/InvestUpgradeable.sol#225-228) has external calls inside a loop: decimals = IERC20MetadataUpgradeable(address(invested())).decimals() (contracts/src/abstracts/InvestUpgradeable.sol#226)\n", + "markdown": "[InvestUpgradeable._toDecimals(uint256)](contracts/src/abstracts/InvestUpgradeable.sol#L225-L228) has external calls inside a loop: [decimals = IERC20MetadataUpgradeable(address(invested())).decimals()](contracts/src/abstracts/InvestUpgradeable.sol#L226)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L225-L228", + "id": "97da19c1aaea2cedb0894e3234c6676a51cdbaaf36dfd76ce5d5a55c1e8c07a2", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 21235, + "length": 637, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + }, + { + "type": "node", + "name": "ldyStaking.tierOf(account) >= 2", + "source_mapping": { + "start": 21476, + "length": 31, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [537], + "starting_column": 13, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 21235, + "length": 637, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "LToken.getWithdrawnAmountAndFees(address,uint256) (contracts/src/LToken.sol#532-545) has external calls inside a loop: ldyStaking.tierOf(account) >= 2 (contracts/src/LToken.sol#537)\n", + "markdown": "[LToken.getWithdrawnAmountAndFees(address,uint256)](contracts/src/LToken.sol#L532-L545) has external calls inside a loop: [ldyStaking.tierOf(account) >= 2](contracts/src/LToken.sol#L537)\n", + "first_markdown_element": "contracts/src/LToken.sol#L532-L545", + "id": "271ee10cbf2006d0cdb07f07313b5a495e00f1852e819513c0497e696ecf564e", + "check": "calls-loop", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + }, + { + "type": "node", + "name": "accountStake.amount == 0", + "source_mapping": { + "start": 6860, + "length": 24, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [168], + "starting_column": 13, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "growthRateSUD > type()(uint256).max / stakeLockDurationSUD", + "source_mapping": { + "start": 7471, + "length": 58, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [179], + "starting_column": 13, + "ending_column": 71 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "accountStake.lockEnd < uint40(block.timestamp)", + "source_mapping": { + "start": 8024, + "length": 154, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [191, 192, 193], + "starting_column": 9, + "ending_column": 61 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + }, + { + "type": "node", + "name": "lockEndIncrease + remainingLockDuration > stakeLockDuration", + "source_mapping": { + "start": 8267, + "length": 163, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [196, 197, 198], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_getLockDurationIncrease", + "source_mapping": { + "start": 6517, + "length": 1920, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_getLockDurationIncrease(address,uint256)" + } + } + } + } + ], + "description": "LDYStaking._getLockDurationIncrease(address,uint256) (contracts/src/LDYStaking.sol#160-199) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountStake.amount == 0 (contracts/src/LDYStaking.sol#168)\n\t- growthRateSUD > type()(uint256).max / stakeLockDurationSUD (contracts/src/LDYStaking.sol#179)\n\t- accountStake.lockEnd < uint40(block.timestamp) (contracts/src/LDYStaking.sol#191-193)\n\t- lockEndIncrease + remainingLockDuration > stakeLockDuration (contracts/src/LDYStaking.sol#196-198)\n", + "markdown": "[LDYStaking._getLockDurationIncrease(address,uint256)](contracts/src/LDYStaking.sol#L160-L199) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountStake.amount == 0](contracts/src/LDYStaking.sol#L168)\n\t- [growthRateSUD > type()(uint256).max / stakeLockDurationSUD](contracts/src/LDYStaking.sol#L179)\n\t- [accountStake.lockEnd < uint40(block.timestamp)](contracts/src/LDYStaking.sol#L191-L193)\n\t- [lockEndIncrease + remainingLockDuration > stakeLockDuration](contracts/src/LDYStaking.sol#L196-L198)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L160-L199", + "id": "3acfd4364fef3684d7c8c27bf46f01211e5282f13bb820926d419cf0f9395c00", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10154, + "length": 1001, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + }, + { + "type": "node", + "name": "require(bool,string)(accountStake.lockEnd > block.timestamp,L24)", + "source_mapping": { + "start": 10397, + "length": 54, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [250], + "starting_column": 9, + "ending_column": 63 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10154, + "length": 1001, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + } + } + } + ], + "description": "LDYStaking.unlock() (contracts/src/LDYStaking.sol#245-269) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(accountStake.lockEnd > block.timestamp,L24) (contracts/src/LDYStaking.sol#250)\n", + "markdown": "[LDYStaking.unlock()](contracts/src/LDYStaking.sol#L245-L269) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(accountStake.lockEnd > block.timestamp,L24)](contracts/src/LDYStaking.sol#L250)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L245-L269", + "id": "cb210c45be5cfa2e86824f7f0accebe694a86c8d6860c652ddf05f6ea89f3bd7", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 12580, + "length": 1091, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + }, + { + "type": "node", + "name": "require(bool,string)(stakeOf(_msgSender()) >= amount,L28)", + "source_mapping": { + "start": 12814, + "length": 47, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [314], + "starting_column": 9, + "ending_column": 56 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 12580, + "length": 1091, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)", + "source_mapping": { + "start": 13038, + "length": 55, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [320], + "starting_column": 9, + "ending_column": 64 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unstake", + "source_mapping": { + "start": 12580, + "length": 1091, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unstake(uint216)" + } + } + } + } + ], + "description": "LDYStaking.unstake(uint216) (contracts/src/LDYStaking.sol#309-337) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(stakeOf(_msgSender()) >= amount,L28) (contracts/src/LDYStaking.sol#314)\n\t- require(bool,string)(accountStake.lockEnd <= block.timestamp,L29) (contracts/src/LDYStaking.sol#320)\n", + "markdown": "[LDYStaking.unstake(uint216)](contracts/src/LDYStaking.sol#L309-L337) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(stakeOf(_msgSender()) >= amount,L28)](contracts/src/LDYStaking.sol#L314)\n\t- [require(bool,string)(accountStake.lockEnd <= block.timestamp,L29)](contracts/src/LDYStaking.sol#L320)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L309-L337", + "id": "4f61e5409d12efaf5b49491311f4f6c5384af368c3f08beb15c5a4a0a258ee8f", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18210, + "length": 564, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + }, + { + "type": "node", + "name": "_tiers.length < 1 || stakedAmount < getTier(1)", + "source_mapping": { + "start": 18453, + "length": 46, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [464], + "starting_column": 13, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18210, + "length": 564, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + }, + { + "type": "node", + "name": "tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)", + "source_mapping": { + "start": 18697, + "length": 62, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [470], + "starting_column": 16, + "ending_column": 78 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "tierOf", + "source_mapping": { + "start": 18210, + "length": 564, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "tierOf(address)" + } + } + } + } + ], + "description": "LDYStaking.tierOf(address) (contracts/src/LDYStaking.sol#459-471) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- _tiers.length < 1 || stakedAmount < getTier(1) (contracts/src/LDYStaking.sol#464)\n\t- tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1) (contracts/src/LDYStaking.sol#470)\n", + "markdown": "[LDYStaking.tierOf(address)](contracts/src/LDYStaking.sol#L459-L471) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [_tiers.length < 1 || stakedAmount < getTier(1)](contracts/src/LDYStaking.sol#L464)\n\t- [tier + 1 <= _tiers.length && stakedAmount >= getTier(tier + 1)](contracts/src/LDYStaking.sol#L470)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L459-L471", + "id": "8a3f77270736f08c7803797bd0208c437d53a5749164777d19af7d00517dd79c", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "recoverUnderlying", + "source_mapping": { + "start": 14149, + "length": 574, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "recoverUnderlying()" + } + }, + { + "type": "node", + "name": "require(bool,string)(recoverableAmount > 0,L44)", + "source_mapping": { + "start": 14543, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [375], + "starting_column": 9, + "ending_column": 46 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "recoverUnderlying", + "source_mapping": { + "start": 14149, + "length": 574, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "recoverUnderlying()" + } + } + } + } + ], + "description": "LToken.recoverUnderlying() (contracts/src/LToken.sol#369-379) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(recoverableAmount > 0,L44) (contracts/src/LToken.sol#375)\n", + "markdown": "[LToken.recoverUnderlying()](contracts/src/LToken.sol#L369-L379) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(recoverableAmount > 0,L44)](contracts/src/LToken.sol#L375)\n", + "first_markdown_element": "contracts/src/LToken.sol#L369-L379", + "id": "7947031d9af57461cc5104246d6d277d55d0e34e63c726742b66c23abd42c9e5", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_transferExceedingToFund", + "source_mapping": { + "start": 18718, + "length": 536, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_transferExceedingToFund()" + } + }, + { + "type": "node", + "name": "usableUnderlyings > expectedRetained", + "source_mapping": { + "start": 18894, + "length": 129, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [473, 474, 475], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_transferExceedingToFund", + "source_mapping": { + "start": 18718, + "length": 536, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_transferExceedingToFund()" + } + } + } + } + ], + "description": "LToken._transferExceedingToFund() (contracts/src/LToken.sol#470-482) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- usableUnderlyings > expectedRetained (contracts/src/LToken.sol#473-475)\n", + "markdown": "[LToken._transferExceedingToFund()](contracts/src/LToken.sol#L470-L482) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [usableUnderlyings > expectedRetained](contracts/src/LToken.sol#L473-L475)\n", + "first_markdown_element": "contracts/src/LToken.sol#L470-L482", + "id": "549dc531d5c0d7118dc3f28a6c1e6729cc9b3f8666d8a8519d1f6b9429c98c8d", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "instantWithdrawal", + "source_mapping": { + "start": 22380, + "length": 1543, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "instantWithdrawal(uint256)" + } + }, + { + "type": "node", + "name": "cond1 = totalQueued + amount <= usableUnderlyings", + "source_mapping": { + "start": 22685, + "length": 54, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [561], + "starting_column": 9, + "ending_column": 63 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "instantWithdrawal", + "source_mapping": { + "start": 22380, + "length": 1543, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "instantWithdrawal(uint256)" + } + } + } + }, + { + "type": "node", + "name": "cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings", + "source_mapping": { + "start": 22842, + "length": 80, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [564], + "starting_column": 9, + "ending_column": 89 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "instantWithdrawal", + "source_mapping": { + "start": 22380, + "length": 1543, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "instantWithdrawal(uint256)" + } + } + } + }, + { + "type": "node", + "name": "! (cond1 || cond2)", + "source_mapping": { + "start": 23002, + "length": 17, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [567], + "starting_column": 13, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "instantWithdrawal", + "source_mapping": { + "start": 22380, + "length": 1543, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "instantWithdrawal(uint256)" + } + } + } + } + ], + "description": "LToken.instantWithdrawal(uint256) (contracts/src/LToken.sol#556-593) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- cond1 = totalQueued + amount <= usableUnderlyings (contracts/src/LToken.sol#561)\n\t- cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings (contracts/src/LToken.sol#564)\n\t- ! (cond1 || cond2) (contracts/src/LToken.sol#567)\n", + "markdown": "[LToken.instantWithdrawal(uint256)](contracts/src/LToken.sol#L556-L593) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [cond1 = totalQueued + amount <= usableUnderlyings](contracts/src/LToken.sol#L561)\n\t- [cond2 = ldyStaking.tierOf(_msgSender()) >= 2 && amount <= usableUnderlyings](contracts/src/LToken.sol#L564)\n\t- [! (cond1 || cond2)](contracts/src/LToken.sol#L567)\n", + "first_markdown_element": "contracts/src/LToken.sol#L556-L593", + "id": "fe2aa4b380b1550e20a73f7e88e849b560c96933798ef32843ec30e9a224c0a1", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "request.amount > getExpectedRetained() / 2", + "source_mapping": { + "start": 25696, + "length": 42, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [631], + "starting_column": 22, + "ending_column": 64 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- request.amount > getExpectedRetained() / 2 (contracts/src/LToken.sol#631)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [request.amount > getExpectedRetained() / 2](contracts/src/LToken.sol#L631)\n", + "first_markdown_element": "contracts/src/LToken.sol#L600-L686", + "id": "6c0b19f41d1632b8383ab18c383ad730cdf4244225c25280ec1e5afefcca039e", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processBigQueuedRequest", + "source_mapping": { + "start": 28479, + "length": 2230, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processBigQueuedRequest(uint256)" + } + }, + { + "type": "node", + "name": "require(bool,string)(request.amount > getExpectedRetained() / 2,L51)", + "source_mapping": { + "start": 28916, + "length": 58, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [706], + "starting_column": 9, + "ending_column": 67 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processBigQueuedRequest", + "source_mapping": { + "start": 28479, + "length": 2230, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processBigQueuedRequest(uint256)" + } + } + } + }, + { + "type": "node", + "name": "require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)", + "source_mapping": { + "start": 29336, + "length": 66, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [716], + "starting_column": 9, + "ending_column": 75 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processBigQueuedRequest", + "source_mapping": { + "start": 28479, + "length": 2230, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processBigQueuedRequest(uint256)" + } + } + } + } + ], + "description": "LToken.processBigQueuedRequest(uint256) (contracts/src/LToken.sol#698-751) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(request.amount > getExpectedRetained() / 2,L51) (contracts/src/LToken.sol#706)\n\t- require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52) (contracts/src/LToken.sol#716)\n", + "markdown": "[LToken.processBigQueuedRequest(uint256)](contracts/src/LToken.sol#L698-L751) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(request.amount > getExpectedRetained() / 2,L51)](contracts/src/LToken.sol#L706)\n\t- [require(bool,string)(withdrawnAmount <= usableUnderlyings + fundBalance,L52)](contracts/src/LToken.sol#L716)\n", + "first_markdown_element": "contracts/src/LToken.sol#L698-L751", + "id": "c94a3bfaf014f65db71217f283a14bf7c788e148c881ee4ad05e3a05aa58e2d9", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "repatriate", + "source_mapping": { + "start": 34522, + "length": 642, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "repatriate(uint256)" + } + }, + { + "type": "node", + "name": "require(bool,string)(newBalance <= getExpectedRetained(),L59)", + "source_mapping": { + "start": 34889, + "length": 51, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [864], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "repatriate", + "source_mapping": { + "start": 34522, + "length": 642, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "repatriate(uint256)" + } + } + } + } + ], + "description": "LToken.repatriate(uint256) (contracts/src/LToken.sol#856-871) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(newBalance <= getExpectedRetained(),L59) (contracts/src/LToken.sol#864)\n", + "markdown": "[LToken.repatriate(uint256)](contracts/src/LToken.sol#L856-L871) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(newBalance <= getExpectedRetained(),L59)](contracts/src/LToken.sol#L864)\n", + "first_markdown_element": "contracts/src/LToken.sol#L856-L871", + "id": "b883d77f8d0d1ca853012da634f66c35ecc9d0adaf9391be23fc4923714414f3", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "claimFees", + "source_mapping": { + "start": 35273, + "length": 534, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "claimFees()" + } + }, + { + "type": "node", + "name": "require(bool,string)(usableUnderlyings >= unclaimedFees,L61)", + "source_mapping": { + "start": 35476, + "length": 50, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [881], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "claimFees", + "source_mapping": { + "start": 35273, + "length": 534, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "claimFees()" + } + } + } + } + ], + "description": "LToken.claimFees() (contracts/src/LToken.sol#876-891) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(usableUnderlyings >= unclaimedFees,L61) (contracts/src/LToken.sol#881)\n", + "markdown": "[LToken.claimFees()](contracts/src/LToken.sol#L876-L891) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool,string)(usableUnderlyings >= unclaimedFees,L61)](contracts/src/LToken.sol#L881)\n", + "first_markdown_element": "contracts/src/LToken.sol#L876-L891", + "id": "60548af87100f1d4c3ff7ae7d4e9c984b9c6312a296a29ebd6ccda8690184db2", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17851, + "length": 1811, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + }, + { + "type": "node", + "name": "accountsInfos[account].period.timestamp == uint40(block.timestamp)", + "source_mapping": { + "start": 18305, + "length": 66, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [422], + "starting_column": 13, + "ending_column": 79 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_beforeInvestmentChange", + "source_mapping": { + "start": 17851, + "length": 1811, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_beforeInvestmentChange(address,bool)" + } + } + } + } + ], + "description": "InvestUpgradeable._beforeInvestmentChange(address,bool) (contracts/src/abstracts/InvestUpgradeable.sol#415-453) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- accountsInfos[account].period.timestamp == uint40(block.timestamp) (contracts/src/abstracts/InvestUpgradeable.sol#422)\n", + "markdown": "[InvestUpgradeable._beforeInvestmentChange(address,bool)](contracts/src/abstracts/InvestUpgradeable.sol#L415-L453) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [accountsInfos[account].period.timestamp == uint40(block.timestamp)](contracts/src/abstracts/InvestUpgradeable.sol#L422)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L415-L453", + "id": "46bf152671fcc8b1ae78deb561ecb4bf3b1a2dfa3633270fc07eb9045ba6d17e", + "check": "timestamp", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "notBlacklisted", + "source_mapping": { + "start": 2052, + "length": 115, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [48, 49, 50, 51], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "notBlacklisted(address)" + } + }, + { + "type": "node", + "name": "require(bool,string)(isBlacklisted(account) == false,L9)", + "source_mapping": { + "start": 2103, + "length": 46, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [49], + "starting_column": 9, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "notBlacklisted", + "source_mapping": { + "start": 2052, + "length": 115, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [48, 49, 50, 51], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "notBlacklisted(address)" + } + } + } + } + ], + "description": "GlobalRestrictableUpgradeable.notBlacklisted(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#48-51) compares to a boolean constant:\n\t-require(bool,string)(isBlacklisted(account) == false,L9) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#49)\n", + "markdown": "[GlobalRestrictableUpgradeable.notBlacklisted(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L48-L51) compares to a boolean constant:\n\t-[require(bool,string)(isBlacklisted(account) == false,L9)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L49)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L48-L51", + "id": "77463bf51bb7b2db2810d546bad8dce0cfea2ee2735b626c1a3465192d18d256", + "check": "boolean-equal", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 25335, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [624], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#624)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L624)\n", + "first_markdown_element": "contracts/src/LToken.sol#L600-L686", + "id": "8a54ddf7bf945327b4b1bd910c39cc1863db92f05f8da559b7a52fa42dbbf89e", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 25803, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [633], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#633)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L633)\n", + "first_markdown_element": "contracts/src/LToken.sol#L600-L686", + "id": "eddc270c89c843fce92b98f6ffaf141102b33d3eb9df3b91bafdc139a62d9166", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, + 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + }, + { + "type": "node", + "name": "delete withdrawalQueue[nextRequestId]", + "source_mapping": { + "start": 27292, + "length": 37, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [668], + "starting_column": 17, + "ending_column": 54 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "processQueuedRequests", + "source_mapping": { + "start": 24193, + "length": 3728, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "processQueuedRequests()" + } + } + } + } + ], + "description": "LToken.processQueuedRequests() (contracts/src/LToken.sol#600-686) has costly operations inside a loop:\n\t- delete withdrawalQueue[nextRequestId] (contracts/src/LToken.sol#668)\n", + "markdown": "[LToken.processQueuedRequests()](contracts/src/LToken.sol#L600-L686) has costly operations inside a loop:\n\t- [delete withdrawalQueue[nextRequestId]](contracts/src/LToken.sol#L668)\n", + "first_markdown_element": "contracts/src/LToken.sol#L600-L686", + "id": "58ce01171ba5dc5553ff2088d66272101a4c6fbee983756d5fde0551f6a9043f", + "check": "costly-loop", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__Base_init_unchained", + "source_mapping": { + "start": 2317, + "length": 61, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [58], + "starting_column": 5, + "ending_column": 66 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "BaseUpgradeable", + "source_mapping": { + "start": 923, + "length": 2114, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Base_init_unchained()" + } + } + ], + "description": "BaseUpgradeable.__Base_init_unchained() (contracts/src/abstracts/base/BaseUpgradeable.sol#58) is never used and should be removed\n", + "markdown": "[BaseUpgradeable.__Base_init_unchained()](contracts/src/abstracts/base/BaseUpgradeable.sol#L58) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L58", + "id": "a17e8b636b70c8282b42f4d2a9510d9351ae1035a36f5e8c25f54028360cdbb1", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__ERC20Base_init_unchained", + "source_mapping": { + "start": 1848, + "length": 66, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [41], + "starting_column": 5, + "ending_column": 71 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ERC20BaseUpgradeable", + "source_mapping": { + "start": 844, + "length": 2666, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__ERC20Base_init_unchained()" + } + } + ], + "description": "ERC20BaseUpgradeable.__ERC20Base_init_unchained() (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#41) is never used and should be removed\n", + "markdown": "[ERC20BaseUpgradeable.__ERC20Base_init_unchained()](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41", + "id": "31b7e269d72dd7bf1ddf4d0d6dcd7752a934613e5c0e76d937b9bfe6b871beb7", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalPausable_init", + "source_mapping": { + "start": 1305, + "length": 168, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [30, 31, 32, 33], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalPausable_init(address)" + } + } + ], + "description": "GlobalPausableUpgradeable.__GlobalPausable_init(address) (contracts/src/abstracts/GlobalPausableUpgradeable.sol#30-33) is never used and should be removed\n", + "markdown": "[GlobalPausableUpgradeable.__GlobalPausable_init(address)](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33", + "id": "47c8542f591e154ee005a192a0cdbb504c04e76158dcad3c8028ccc2f131744a", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalRestrictable_init", + "source_mapping": { + "start": 1248, + "length": 157, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [27, 28, 29], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalRestrictable_init(address)" + } + } + ], + "description": "GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#27-29) is never used and should be removed\n", + "markdown": "[GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29", + "id": "ce1d20c3f312e69f007b8f7b71f9916109b200e860f22b929bea1a9b290771b0", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__Invest_init", + "source_mapping": { + "start": 3921, + "length": 294, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [90, 91, 92, 93, 94, 95, 96, 97, 98], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Invest_init(address,address,address,address)" + } + } + ], + "description": "InvestUpgradeable.__Invest_init(address,address,address,address) (contracts/src/abstracts/InvestUpgradeable.sol#90-98) is never used and should be removed\n", + "markdown": "[InvestUpgradeable.__Invest_init(address,address,address,address)](contracts/src/abstracts/InvestUpgradeable.sol#L90-L98) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L90-L98", + "id": "4cad44a31c653c38c1f2917d4874e869e8fee018e4b7a9ed3f6d5af1dbeda3a5", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__Recoverable_init", + "source_mapping": { + "start": 813, + "length": 167, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [20, 21, 22, 23], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "RecoverableUpgradeable", + "source_mapping": { + "start": 683, + "length": 1460, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Recoverable_init(address)" + } + } + ], + "description": "RecoverableUpgradeable.__Recoverable_init(address) (contracts/src/abstracts/RecoverableUpgradeable.sol#20-23) is never used and should be removed\n", + "markdown": "[RecoverableUpgradeable.__Recoverable_init(address)](contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23) is never used and should be removed\n", + "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23", + "id": "1d9f0762325f1a9906b2b44290e848d1a995b76e85040263cb82bf7c88f68fa6", + "check": "dead-code", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalOwnable_init", + "source_mapping": { + "start": 1269, + "length": 382, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [30, 31, 32, 33, 34, 35], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalOwnable_init(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function GlobalOwnableUpgradeable.__GlobalOwnable_init(address) (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#30-35) is not in mixedCase\n", + "markdown": "Function [GlobalOwnableUpgradeable.__GlobalOwnable_init(address)](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L30-L35) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L30-L35", + "id": "12431f0df37f282615437918efb76a9cb00a63ba1e07be4857d55925e10b958a", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalOwnable_init_unchained", + "source_mapping": { + "start": 1657, + "length": 145, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [37, 38, 39], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalOwnable_init_unchained(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address) (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#37-39) is not in mixedCase\n", + "markdown": "Function [GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address)](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L37-L39) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L37-L39", + "id": "de646abc41618180f9f77382ce7bc1608b6776b8598dfecfb3bbf7c3ce7455cb", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 3007, + "length": 25, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [73], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable GlobalOwnableUpgradeable.__gap (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#73) is not in mixedCase\n", + "markdown": "Variable [GlobalOwnableUpgradeable.__gap](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L73) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L73", + "id": "3f47daad5ab5cc56ecd5a6334c857e82140ade7af9a2ef28565df998a82fa90a", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalPausable_init", + "source_mapping": { + "start": 1305, + "length": 168, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [30, 31, 32, 33], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalPausable_init(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function GlobalPausableUpgradeable.__GlobalPausable_init(address) (contracts/src/abstracts/GlobalPausableUpgradeable.sol#30-33) is not in mixedCase\n", + "markdown": "Function [GlobalPausableUpgradeable.__GlobalPausable_init(address)](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30-L33", + "id": "fdda1388218e25f7803985e76069313056f9b7d9dcc6eee49846a8348fbed0f7", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalPausable_init_unchained", + "source_mapping": { + "start": 1479, + "length": 146, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [35, 36, 37], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalPausable_init_unchained(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address) (contracts/src/abstracts/GlobalPausableUpgradeable.sol#35-37) is not in mixedCase\n", + "markdown": "Function [GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address)](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L35-L37) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L35-L37", + "id": "2018d4138b0048ee8c52de10caf52edf5ca0ef0e5fc95259d2942447a3c1075f", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 2451, + "length": 25, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [61], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable GlobalPausableUpgradeable.__gap (contracts/src/abstracts/GlobalPausableUpgradeable.sol#61) is not in mixedCase\n", + "markdown": "Variable [GlobalPausableUpgradeable.__gap](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L61) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L61", + "id": "111481d2f9b7767e2ee49372683c68041b638e3bc74fcdcfd7b15bfd54df0bf1", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalRestrictable_init", + "source_mapping": { + "start": 1248, + "length": 157, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [27, 28, 29], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalRestrictable_init(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#27-29) is not in mixedCase\n", + "markdown": "Function [GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27-L29", + "id": "777b223064723c54e04e0effaf164929327aa944a77a51261744dd5b392e8308", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__GlobalRestrictable_init_unchained", + "source_mapping": { + "start": 1411, + "length": 166, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [31, 32, 33], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalRestrictable_init_unchained(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address) (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#31-33) is not in mixedCase\n", + "markdown": "Function [GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address)](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L31-L33) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L31-L33", + "id": "cf7ce6915177bc78ad6fe5393cb157057bf5a3d09ac1d5dc5d9813ebe179713d", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 2778, + "length": 25, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [67], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable GlobalRestrictableUpgradeable.__gap (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#67) is not in mixedCase\n", + "markdown": "Variable [GlobalRestrictableUpgradeable.__gap](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L67", + "id": "fab288b6cd2599539363b01adef11f1922a68041c34e60ba8f166f6562c4b2c6", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__Invest_init", + "source_mapping": { + "start": 3921, + "length": 294, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [90, 91, 92, 93, 94, 95, 96, 97, 98], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Invest_init(address,address,address,address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function InvestUpgradeable.__Invest_init(address,address,address,address) (contracts/src/abstracts/InvestUpgradeable.sol#90-98) is not in mixedCase\n", + "markdown": "Function [InvestUpgradeable.__Invest_init(address,address,address,address)](contracts/src/abstracts/InvestUpgradeable.sol#L90-L98) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L90-L98", + "id": "58bb354a0d3add83b462c0fde5e45739bbedc34c14489fc1d3157c102088a502", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__Invest_init_unchained", + "source_mapping": { + "start": 4221, + "length": 135, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [100, 101, 102], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Invest_init_unchained(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function InvestUpgradeable.__Invest_init_unchained(address) (contracts/src/abstracts/InvestUpgradeable.sol#100-102) is not in mixedCase\n", + "markdown": "Function [InvestUpgradeable.__Invest_init_unchained(address)](contracts/src/abstracts/InvestUpgradeable.sol#L100-L102) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L100-L102", + "id": "d382054d26f3fc3ce16ad9ae8488c9c4c867c1fb9f41dfb90c607928a875b60a", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 19927, + "length": 25, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [460], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable InvestUpgradeable.__gap (contracts/src/abstracts/InvestUpgradeable.sol#460) is not in mixedCase\n", + "markdown": "Variable [InvestUpgradeable.__gap](contracts/src/abstracts/InvestUpgradeable.sol#L460) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L460", + "id": "39b17c20d1acb550c46edd53643605406d81055451d6e71f8dadbc102c35c858", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__Recoverable_init", + "source_mapping": { + "start": 813, + "length": 167, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [20, 21, 22, 23], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "RecoverableUpgradeable", + "source_mapping": { + "start": 683, + "length": 1460, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Recoverable_init(address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function RecoverableUpgradeable.__Recoverable_init(address) (contracts/src/abstracts/RecoverableUpgradeable.sol#20-23) is not in mixedCase\n", + "markdown": "Function [RecoverableUpgradeable.__Recoverable_init(address)](contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L20-L23", + "id": "3b18359431ce3cb7c762beadbdd4b30281a1973ed68d43dbce34035f495c8648", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__Recoverable_init_unchained", + "source_mapping": { + "start": 986, + "length": 68, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [25], + "starting_column": 5, + "ending_column": 73 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "RecoverableUpgradeable", + "source_mapping": { + "start": 683, + "length": 1460, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Recoverable_init_unchained()" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function RecoverableUpgradeable.__Recoverable_init_unchained() (contracts/src/abstracts/RecoverableUpgradeable.sol#25) is not in mixedCase\n", + "markdown": "Function [RecoverableUpgradeable.__Recoverable_init_unchained()](contracts/src/abstracts/RecoverableUpgradeable.sol#L25) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L25", + "id": "16fcd3be5c944515cabbda9dff407d12863eb14750b71f677853efcbfd3d4685", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 2115, + "length": 25, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [52], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "RecoverableUpgradeable", + "source_mapping": { + "start": 683, + "length": 1460, + "filename_relative": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/RecoverableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/RecoverableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable RecoverableUpgradeable.__gap (contracts/src/abstracts/RecoverableUpgradeable.sol#52) is not in mixedCase\n", + "markdown": "Variable [RecoverableUpgradeable.__gap](contracts/src/abstracts/RecoverableUpgradeable.sol#L52) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/RecoverableUpgradeable.sol#L52", + "id": "978da6722f4a3feb709d3065096d662472a25fbc0d01db33d4f192e0f68921cd", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__Base_init", + "source_mapping": { + "start": 1894, + "length": 417, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "BaseUpgradeable", + "source_mapping": { + "start": 923, + "length": 2114, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Base_init(address,address,address)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function BaseUpgradeable.__Base_init(address,address,address) (contracts/src/abstracts/base/BaseUpgradeable.sol#45-56) is not in mixedCase\n", + "markdown": "Function [BaseUpgradeable.__Base_init(address,address,address)](contracts/src/abstracts/base/BaseUpgradeable.sol#L45-L56) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L45-L56", + "id": "6a14e2f7c132f3a198686e927414912e270dd5ac6dfd7d47c490c8248d7a6193", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__Base_init_unchained", + "source_mapping": { + "start": 2317, + "length": 61, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [58], + "starting_column": 5, + "ending_column": 66 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "BaseUpgradeable", + "source_mapping": { + "start": 923, + "length": 2114, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__Base_init_unchained()" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function BaseUpgradeable.__Base_init_unchained() (contracts/src/abstracts/base/BaseUpgradeable.sol#58) is not in mixedCase\n", + "markdown": "Function [BaseUpgradeable.__Base_init_unchained()](contracts/src/abstracts/base/BaseUpgradeable.sol#L58) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L58", + "id": "ad87e1cd2a06197f63d7611532d6faccdb8fef175c0d9c96d0369b72e5c73ab8", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 3009, + "length": 25, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [72], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "BaseUpgradeable", + "source_mapping": { + "start": 923, + "length": 2114, + "filename_relative": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable BaseUpgradeable.__gap (contracts/src/abstracts/base/BaseUpgradeable.sol#72) is not in mixedCase\n", + "markdown": "Variable [BaseUpgradeable.__gap](contracts/src/abstracts/base/BaseUpgradeable.sol#L72) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/base/BaseUpgradeable.sol#L72", + "id": "13879b2e2030e5b3755771534c7c23865350bcf85817d4f5014ee1d12203bd6a", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__ERC20Base_init", + "source_mapping": { + "start": 1476, + "length": 366, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ERC20BaseUpgradeable", + "source_mapping": { + "start": 844, + "length": 2666, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__ERC20Base_init(address,address,address,string,string)" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function ERC20BaseUpgradeable.__ERC20Base_init(address,address,address,string,string) (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#29-39) is not in mixedCase\n", + "markdown": "Function [ERC20BaseUpgradeable.__ERC20Base_init(address,address,address,string,string)](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L29-L39) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L29-L39", + "id": "fa58b6a55e1dc914384a304a52ec0337484a914570d46ef8e89949c2e741e997", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "__ERC20Base_init_unchained", + "source_mapping": { + "start": 1848, + "length": 66, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [41], + "starting_column": 5, + "ending_column": 71 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ERC20BaseUpgradeable", + "source_mapping": { + "start": 844, + "length": 2666, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__ERC20Base_init_unchained()" + }, + "additional_fields": { "target": "function", "convention": "mixedCase" } + } + ], + "description": "Function ERC20BaseUpgradeable.__ERC20Base_init_unchained() (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#41) is not in mixedCase\n", + "markdown": "Function [ERC20BaseUpgradeable.__ERC20Base_init_unchained()](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L41", + "id": "83ef89c8d2837559dc713d3033bcad6ee3fc0f4bbe9684fc29563b79b14061e2", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "__gap", + "source_mapping": { + "start": 3482, + "length": 25, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [87], + "starting_column": 5, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ERC20BaseUpgradeable", + "source_mapping": { + "start": 844, + "length": 2666, + "filename_relative": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "filename_short": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol", + "is_dependency": false, + "lines": [ + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { "target": "variable", "convention": "mixedCase" } + } + ], + "description": "Variable ERC20BaseUpgradeable.__gap (contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#87) is not in mixedCase\n", + "markdown": "Variable [ERC20BaseUpgradeable.__gap](contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L87) is not in mixedCase\n", + "first_markdown_element": "contracts/src/abstracts/base/ERC20BaseUpgradeable.sol#L87", + "id": "2f8ae02fadfdd7e6c1bd5be25e174621fe450e0c193aa2bd6688a36163ea402c", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 19674, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [492], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 19575, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [491, 492, 493, 494, 495], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#492)\" inLToken (contracts/src/LToken.sol#32-892)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L492)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", + "first_markdown_element": "contracts/src/LToken.sol#L492", + "id": "1b204fef3db504bb40630259bb832dd332da5d7cf4fb81ce4f67c0a1d1789ab6", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 19735, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [493], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "withdrawTo", + "source_mapping": { + "start": 19575, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [491, 492, 493, 494, 495], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "withdrawTo(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#493)\" inLToken (contracts/src/LToken.sol#32-892)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L493)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", + "first_markdown_element": "contracts/src/LToken.sol#L493", + "id": "1817db5806218f3f43dd1b1a26fa111b5780de76cf24218249dba9c5fb83ac34", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 19876, + "length": 7, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [498], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 19777, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [497, 498, 499, 500, 501], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/LToken.sol#498)\" inLToken (contracts/src/LToken.sol#32-892)\n", + "markdown": "Redundant expression \"[account](contracts/src/LToken.sol#L498)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", + "first_markdown_element": "contracts/src/LToken.sol#L498", + "id": "acd92932fffc7455463323f1ba4991da39b8f2d4c0071401d4abdff2419678b3", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 19937, + "length": 6, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [499], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "depositFor", + "source_mapping": { + "start": 19777, + "length": 196, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [497, 498, 499, 500, 501], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "depositFor(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/LToken.sol#499)\" inLToken (contracts/src/LToken.sol#32-892)\n", + "markdown": "Redundant expression \"[amount](contracts/src/LToken.sol#L499)\" in[LToken](contracts/src/LToken.sol#L32-L892)\n", + "first_markdown_element": "contracts/src/LToken.sol#L499", + "id": "fc2762bf7a3d04e27f616ce1f19449f2db50ce7eef28af4cfde2d19bf4cb7532", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "newOwner", + "source_mapping": { + "start": 2661, + "length": 8, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [64], + "starting_column": 9, + "ending_column": 17 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "transferOwnership", + "source_mapping": { + "start": 2575, + "length": 167, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [63, 64, 65, 66], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "transferOwnership(address)" + } + } + } + }, + { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"newOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#64)\" inGlobalOwnableUpgradeable (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#17-74)\n", + "markdown": "Redundant expression \"[newOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L64)\" in[GlobalOwnableUpgradeable](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L17-L74)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L64", + "id": "d86049011c51d3bab8ee6454da574577619f63e0e998c9eb1e719845310150b8", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "account", + "source_mapping": { + "start": 8192, + "length": 7, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [208], + "starting_column": 9, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 8089, + "length": 190, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [207, 208, 209, 210, 211], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"account (contracts/src/abstracts/InvestUpgradeable.sol#208)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#33-461)\n", + "markdown": "Redundant expression \"[account](contracts/src/abstracts/InvestUpgradeable.sol#L208)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L33-L461)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L208", + "id": "6551bd1a28e0191d819a0eed677c7bd45f6052444b2da8e42db718f2211a020f", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "amount", + "source_mapping": { + "start": 8244, + "length": 6, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [209], + "starting_column": 9, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "_distributeRewards", + "source_mapping": { + "start": 8089, + "length": 190, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [207, 208, 209, 210, 211], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "_distributeRewards(address,uint256)" + } + } + } + }, + { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Redundant expression \"amount (contracts/src/abstracts/InvestUpgradeable.sol#209)\" inInvestUpgradeable (contracts/src/abstracts/InvestUpgradeable.sol#33-461)\n", + "markdown": "Redundant expression \"[amount](contracts/src/abstracts/InvestUpgradeable.sol#L209)\" in[InvestUpgradeable](contracts/src/abstracts/InvestUpgradeable.sol#L33-L461)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L209", + "id": "369af39d0f52b4b692283217c17c764fdc5e2f669a6cff5205f5555d0163ceff", + "check": "redundant-statements", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "rewardsRedirectsFromTo", + "source_mapping": { + "start": 3035, + "length": 57, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [69], + "starting_column": 5, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "rewardsRedirectsToFrom", + "source_mapping": { + "start": 3098, + "length": 59, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [70], + "starting_column": 5, + "ending_column": 64 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "InvestUpgradeable", + "source_mapping": { + "start": 1614, + "length": 18341, + "filename_relative": "contracts/src/abstracts/InvestUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/InvestUpgradeable.sol", + "filename_short": "contracts/src/abstracts/InvestUpgradeable.sol", + "is_dependency": false, + "lines": [ + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + } + ], + "description": "Variable InvestUpgradeable.rewardsRedirectsFromTo (contracts/src/abstracts/InvestUpgradeable.sol#69) is too similar to InvestUpgradeable.rewardsRedirectsToFrom (contracts/src/abstracts/InvestUpgradeable.sol#70)\n", + "markdown": "Variable [InvestUpgradeable.rewardsRedirectsFromTo](contracts/src/abstracts/InvestUpgradeable.sol#L69) is too similar to [InvestUpgradeable.rewardsRedirectsToFrom](contracts/src/abstracts/InvestUpgradeable.sol#L70)\n", + "first_markdown_element": "contracts/src/abstracts/InvestUpgradeable.sol#L69", + "id": "83369d2643084df5774b1e62f1c2c29996ed0f4f3c4ae6ec7248fdcd2f1dd45b", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "unlockFeesRateUD7x3_", + "source_mapping": { + "start": 9099, + "length": 25, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [215], + "starting_column": 32, + "ending_column": 57 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setUnlockFeesRate", + "source_mapping": { + "start": 9072, + "length": 126, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [215, 216, 217], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setUnlockFeesRate(uint32)" + } + } + } + }, + { + "type": "variable", + "name": "unlockFeesRateSUD", + "source_mapping": { + "start": 10672, + "length": 59, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [257], + "starting_column": 9, + "ending_column": 68 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "unlock", + "source_mapping": { + "start": 10154, + "length": 1001, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LDYStaking", + "source_mapping": { + "start": 1294, + "length": 17482, + "filename_relative": "contracts/src/LDYStaking.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LDYStaking.sol", + "filename_short": "contracts/src/LDYStaking.sol", + "is_dependency": false, + "lines": [ + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "unlock()" + } + } + } + } + ], + "description": "Variable LDYStaking.setUnlockFeesRate(uint32).unlockFeesRateUD7x3_ (contracts/src/LDYStaking.sol#215) is too similar to LDYStaking.unlock().unlockFeesRateSUD (contracts/src/LDYStaking.sol#257)\n", + "markdown": "Variable [LDYStaking.setUnlockFeesRate(uint32).unlockFeesRateUD7x3_](contracts/src/LDYStaking.sol#L215) is too similar to [LDYStaking.unlock().unlockFeesRateSUD](contracts/src/LDYStaking.sol#L257)\n", + "first_markdown_element": "contracts/src/LDYStaking.sol#L215", + "id": "1ee9e89393d764a44602f5032ba013f16dfc65ee6a4da023f339b417b8e59e64", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "feesRateUD7x3_", + "source_mapping": { + "start": 7768, + "length": 19, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [208], + "starting_column": 26, + "ending_column": 45 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setFeesRate", + "source_mapping": { + "start": 7747, + "length": 102, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [208, 209, 210], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setFeesRate(uint32)" + } + } + } + }, + { + "type": "variable", + "name": "feesRateSUD", + "source_mapping": { + "start": 21665, + "length": 47, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [541], + "starting_column": 9, + "ending_column": 56 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getWithdrawnAmountAndFees", + "source_mapping": { + "start": 21235, + "length": 637, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getWithdrawnAmountAndFees(address,uint256)" + } + } + } + } + ], + "description": "Variable LToken.setFeesRate(uint32).feesRateUD7x3_ (contracts/src/LToken.sol#208) is too similar to LToken.getWithdrawnAmountAndFees(address,uint256).feesRateSUD (contracts/src/LToken.sol#541)\n", + "markdown": "Variable [LToken.setFeesRate(uint32).feesRateUD7x3_](contracts/src/LToken.sol#L208) is too similar to [LToken.getWithdrawnAmountAndFees(address,uint256).feesRateSUD](contracts/src/LToken.sol#L541)\n", + "first_markdown_element": "contracts/src/LToken.sol#L208", + "id": "0bc263268cae7eb8a9cd709439a1f79930eab1e6b3e87629df9fbf58af54069b", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "retentionRateUD7x3_", + "source_mapping": { + "start": 8226, + "length": 24, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [219], + "starting_column": 31, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "setRetentionRate", + "source_mapping": { + "start": 8200, + "length": 185, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [219, 220, 221, 222], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "setRetentionRate(uint32)" + } + } + } + }, + { + "type": "variable", + "name": "retentionRateSUD", + "source_mapping": { + "start": 18110, + "length": 57, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [458], + "starting_column": 9, + "ending_column": 66 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "getExpectedRetained", + "source_mapping": { + "start": 17969, + "length": 351, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [456, 457, 458, 459, 460, 461], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "LToken", + "source_mapping": { + "start": 1551, + "length": 34258, + "filename_relative": "contracts/src/LToken.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/LToken.sol", + "filename_short": "contracts/src/LToken.sol", + "is_dependency": false, + "lines": [ + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, + 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, + 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "getExpectedRetained()" + } + } + } + } + ], + "description": "Variable LToken.setRetentionRate(uint32).retentionRateUD7x3_ (contracts/src/LToken.sol#219) is too similar to LToken.getExpectedRetained().retentionRateSUD (contracts/src/LToken.sol#458)\n", + "markdown": "Variable [LToken.setRetentionRate(uint32).retentionRateUD7x3_](contracts/src/LToken.sol#L219) is too similar to [LToken.getExpectedRetained().retentionRateSUD](contracts/src/LToken.sol#L458)\n", + "first_markdown_element": "contracts/src/LToken.sol#L219", + "id": "d3ff7ac0ce4a0ffd372a3c4db5e6f58005891819bac9a91fe3a325cb93c5e8a7", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "_globalOwner", + "source_mapping": { + "start": 944, + "length": 32, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [22], + "starting_column": 5, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "globalOwner_", + "source_mapping": { + "start": 1299, + "length": 20, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [30], + "starting_column": 35, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "__GlobalOwnable_init", + "source_mapping": { + "start": 1269, + "length": 382, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [30, 31, 32, 33, 34, 35], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalOwnable_init(address)" + } + } + } + } + ], + "description": "Variable GlobalOwnableUpgradeable._globalOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#22) is too similar to GlobalOwnableUpgradeable.__GlobalOwnable_init(address).globalOwner_ (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#30)\n", + "markdown": "Variable [GlobalOwnableUpgradeable._globalOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22) is too similar to [GlobalOwnableUpgradeable.__GlobalOwnable_init(address).globalOwner_](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L30)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22", + "id": "35d95939e7a1d690bebe05c460d057e7c8169c241957bade0a15b3993664f866", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "_globalOwner", + "source_mapping": { + "start": 944, + "length": 32, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [22], + "starting_column": 5, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "globalOwner_", + "source_mapping": { + "start": 1697, + "length": 20, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [37], + "starting_column": 45, + "ending_column": 65 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "__GlobalOwnable_init_unchained", + "source_mapping": { + "start": 1657, + "length": 145, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [37, 38, 39], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalOwnableUpgradeable", + "source_mapping": { + "start": 743, + "length": 2292, + "filename_relative": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalOwnable_init_unchained(address)" + } + } + } + } + ], + "description": "Variable GlobalOwnableUpgradeable._globalOwner (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#22) is too similar to GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address).globalOwner_ (contracts/src/abstracts/GlobalOwnableUpgradeable.sol#37)\n", + "markdown": "Variable [GlobalOwnableUpgradeable._globalOwner](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22) is too similar to [GlobalOwnableUpgradeable.__GlobalOwnable_init_unchained(address).globalOwner_](contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L37)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalOwnableUpgradeable.sol#L22", + "id": "65f8b5fae3b7b419bd45fae647db8b6555f1e93fbb10571fcb07c57984651584", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "_globalPause", + "source_mapping": { + "start": 980, + "length": 32, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [22], + "starting_column": 5, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "globalPause_", + "source_mapping": { + "start": 1336, + "length": 20, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [30], + "starting_column": 36, + "ending_column": 56 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "__GlobalPausable_init", + "source_mapping": { + "start": 1305, + "length": 168, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [30, 31, 32, 33], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalPausable_init(address)" + } + } + } + } + ], + "description": "Variable GlobalPausableUpgradeable._globalPause (contracts/src/abstracts/GlobalPausableUpgradeable.sol#22) is too similar to GlobalPausableUpgradeable.__GlobalPausable_init(address).globalPause_ (contracts/src/abstracts/GlobalPausableUpgradeable.sol#30)\n", + "markdown": "Variable [GlobalPausableUpgradeable._globalPause](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22) is too similar to [GlobalPausableUpgradeable.__GlobalPausable_init(address).globalPause_](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L30)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22", + "id": "52ed3e556bd1e798419746c5e7e355ff41d74819815b8aeec53b7f16a81e2bd6", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "_globalPause", + "source_mapping": { + "start": 980, + "length": 32, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [22], + "starting_column": 5, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "globalPause_", + "source_mapping": { + "start": 1520, + "length": 20, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [35], + "starting_column": 46, + "ending_column": 66 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "__GlobalPausable_init_unchained", + "source_mapping": { + "start": 1479, + "length": 146, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [35, 36, 37], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalPausableUpgradeable", + "source_mapping": { + "start": 777, + "length": 1702, + "filename_relative": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalPausableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalPausable_init_unchained(address)" + } + } + } + } + ], + "description": "Variable GlobalPausableUpgradeable._globalPause (contracts/src/abstracts/GlobalPausableUpgradeable.sol#22) is too similar to GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address).globalPause_ (contracts/src/abstracts/GlobalPausableUpgradeable.sol#35)\n", + "markdown": "Variable [GlobalPausableUpgradeable._globalPause](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22) is too similar to [GlobalPausableUpgradeable.__GlobalPausable_init_unchained(address).globalPause_](contracts/src/abstracts/GlobalPausableUpgradeable.sol#L35)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalPausableUpgradeable.sol#L22", + "id": "c4e25573e3fa25856a5db3e0745dcb793eb01fba66bb4066eec8aef130b020f9", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "_globalBlacklist", + "source_mapping": { + "start": 907, + "length": 40, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [19], + "starting_column": 5, + "ending_column": 45 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "globalBlacklist_", + "source_mapping": { + "start": 1456, + "length": 24, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [31], + "starting_column": 50, + "ending_column": 74 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "__GlobalRestrictable_init_unchained", + "source_mapping": { + "start": 1411, + "length": 166, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [31, 32, 33], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalRestrictable_init_unchained(address)" + } + } + } + } + ], + "description": "Variable GlobalRestrictableUpgradeable._globalBlacklist (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#19) is too similar to GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address).globalBlacklist_ (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#31)\n", + "markdown": "Variable [GlobalRestrictableUpgradeable._globalBlacklist](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19) is too similar to [GlobalRestrictableUpgradeable.__GlobalRestrictable_init_unchained(address).globalBlacklist_](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L31)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19", + "id": "798d95cd713a837f5c401fbbc2dacc685874f0e2101ef052c17a8b9f9c724843", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "_globalBlacklist", + "source_mapping": { + "start": 907, + "length": 40, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [19], + "starting_column": 5, + "ending_column": 45 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "variable", + "name": "globalBlacklist_", + "source_mapping": { + "start": 1283, + "length": 24, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [27], + "starting_column": 40, + "ending_column": 64 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "__GlobalRestrictable_init", + "source_mapping": { + "start": 1248, + "length": 157, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [27, 28, 29], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "GlobalRestrictableUpgradeable", + "source_mapping": { + "start": 793, + "length": 2013, + "filename_relative": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_absolute": "/home/lil/fi/POWs/Ledgity/repos/dapp/contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "filename_short": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol", + "is_dependency": false, + "lines": [ + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "__GlobalRestrictable_init(address)" + } + } + } + } + ], + "description": "Variable GlobalRestrictableUpgradeable._globalBlacklist (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#19) is too similar to GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address).globalBlacklist_ (contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#27)\n", + "markdown": "Variable [GlobalRestrictableUpgradeable._globalBlacklist](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19) is too similar to [GlobalRestrictableUpgradeable.__GlobalRestrictable_init(address).globalBlacklist_](contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L27)\n", + "first_markdown_element": "contracts/src/abstracts/GlobalRestrictableUpgradeable.sol#L19", + "id": "febf0885d6b472b2c94ce7cf14518f688845057b92a7bf549fb8d48ef2eecfb8", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + } +] diff --git a/src/app/(site)/legal/privacy-policy/page.tsx b/src/app/(site)/legal/privacy-policy/page.tsx index 181a86ff..6b657413 100644 --- a/src/app/(site)/legal/privacy-policy/page.tsx +++ b/src/app/(site)/legal/privacy-policy/page.tsx @@ -8,7 +8,9 @@ export const metadata = { const Page: NextPage = () => { return (
-

Privacy Policy

+

+ Privacy Policy +